グループ化後にユニオンスローを実行する必要があります "リダクシブルノードでなければなりません"例外

entity-framework-core

質問

私はunoin 2つのクエリを必要とすると、それによって労働組合のグループの後に、しかし "スローすることができます"ノードを縮小する必要があります。次のサンプルコードでは:

public class ForumPost
{
    public int ForumPostId { get; set; }
    public string Message { get; set; }
    public bool Deleted { get; set; }
    public int ForumTopicId { get; set; }
    public virtual ForumTopic ForumTopic { get; set; }
}

var query1 = _dbContext.ForumPosts
    .Where(e => e.Deleted == true);

var query2 = _dbContext.ForumPosts
    .Where(e => e.Deleted == false);

var query =  query1.Union(query2);

var list = query.GroupBy(e => e.ForumTopicId)
    .Select(group => new
    {
        group.Key,
        Total = group.Count()
    }).Take(10)
    .ToList();

誰もこの問題に直面していますか?

受け入れられた回答

私はこの特別なケースが有効になっていなかったと思いますが、EntityFrameworkのコアロードマップを見ると、「Critical O / RM Features」に次のエントリが表示されます:

重要なO / RM機能

私たちがEF Coreと言う前に必要と思うことは、EFの推奨バージョンです。これらの機能を実装するまで、EF Coreは多くのアプリケーション、特にEF6.xが動作しないUWPや.NET Coreなどのプラットフォームで有効なオプションですが、多くのアプリケーションではこれらの機能が不足するとEF6.xaがより良いオプションになります。

クエリ

  • 翻訳が改善されると、より多くのクエリが正常に実行され、より多くのロジックが (メモリではなく) データベースで評価されます
  • GroupBy変換は、メモリ内ではなく、LINQ GroupBy演算子の変換をデータベースに移動します。

これを回避するには、連合クエリからデータを取り出す(つまり、 .ToList()または.AsEnuberable()上で.AsEnuberable()を実行し、メモリ内のGroupByを2つまで実行する機能が実装されています。

私の知る限り、 EntityFramework Core 1.1は2016年第1四半期(Q1 / 2017 )の第4四半期に予定されていますので、プロジェクトの期限に応じて待機するか回避策を実行してください。

Rowan Miller氏は、ASP.NET Core 1.1との同期を維持したいと言いましたが、2016年秋に予定されています。これには技術的な理由(ASP.NET Core 1.1が必要な機能)はありません。現在のところ、ASP.NET Coreと同期していますが、今後は独自の独立したリリースサイクルになるかもしれません。

または、あなたが非常に勇敢で、あなたのWebアプリケーションがまだ生産準備が整っていない場合は、夜間のビルドを試すことができます



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ