2017-11-08 8 views
1

私はEFコア2.0を使用しており、子コレクションをフィルタリングしたいと考えています。誰も私にEFコア2.0でこれを行う方法を手伝ってもらえますか?私はcategory.Alerts.where(alert=>alert.caseId==1)ThenIncludeのEntifyframeworkコア2.0フィルタ

おかげ

+2

まだサポートされていません。 [Filtering Include#1833のサポート](https://github.com/aspnet/EntityFrameworkCore/issues/1833)リクエストを参照してください。 –

答えて

0

をフィルタリングする上記のコードで

var items = await _context.RiskType 
           .Include(r => r.Categories) 
           .ThenInclude(category => category.Alerts) 
           .ToListAsync(); 

としては、これはまだサポートされていませんコメントの一つで述べています。しかし、あなたはそれを周りに得ることができます。

まず、必要なデータを匿名オブジェクトまたはDTOオブジェクトに.Select()して操作できます。以下のサンプルコードでは、.Select()メソッドがあるため、.Include()はEF Coreによって無視されます。しかし、私はそれを明確にするのが好きです。

もう1つの方法は、必要な特定の親のエンティティを明示的に読み込むことです。これは、親の一部だけに子をロードする必要がある場合に便利ですが、大きなコレクションがあり、すべての子をロードする場合は、明示的なロードがデータベースへのトリップになることに注意してください。下のコードサンプルでは、​​親エントリの.Collection()を.Load()し、フィルタリングする場合は、取得に使用するクエリを取得できるように.Query()を使用する必要がありますエンティティを作成し、.Where()メソッドでフィルタを適用します。最後に.Load()を呼び出して、Parentエンティティの子エンティティをロードするだけです。コレクションではないナビゲーションプロパティに対して明示的な読み込みを使用する場合は、.Collection()ではなく.Reference()メソッドを使用する必要があります。

Parent parent = context.Parents.Find(/*Key*/); 

context.Entry(parent) 
     .Collection(p => p.Children) 
     .Query() 
     .Where(/*Filter Func for the children collection*/) 
     .Load() 

私はEFをかなり新しくしています。誰かがもっと提案してくれたら、私はそれらを見たいと思います。

関連する問題