私はEFコア2.0を使用しており、子コレクションをフィルタリングしたいと考えています。誰も私にEFコア2.0でこれを行う方法を手伝ってもらえますか?私はcategory.Alerts.where(alert=>alert.caseId==1)
ThenIncludeのEntifyframeworkコア2.0フィルタ
おかげ
私はEFコア2.0を使用しており、子コレクションをフィルタリングしたいと考えています。誰も私にEFコア2.0でこれを行う方法を手伝ってもらえますか?私はcategory.Alerts.where(alert=>alert.caseId==1)
ThenIncludeのEntifyframeworkコア2.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をかなり新しくしています。誰かがもっと提案してくれたら、私はそれらを見たいと思います。
まだサポートされていません。 [Filtering Include#1833のサポート](https://github.com/aspnet/EntityFrameworkCore/issues/1833)リクエストを参照してください。 –