条件付きインクルードを使用したEFクエリ

entity-framework

質問

WorkItemテーブルとWorkItemNoteテーブルの2つのテーブルがあります。特定の基準を満たすWorkItemとすべてのWorkItemNotesを返す方法を教えてください。

私はこれが単純であるべきだと思います、条件付きの「含む」のようにね。

受け入れられた回答

私はこれについてのコツを書くことを計画してました、しかしあなたの質問は私にパンチを打たせました。

WorkItemに多数のWorkItemNotesがあると仮定しWorkItemNotes

あなたはこれを行うことができます:

var intermediary = (from item in ctx.WorkItems
              from note in item.Notes
              where note.SomeProp == SomeValue
              select new {item, note}).AsEnumerable();

これにより、一致する各WorkItemNoteに対して匿名の要素が生成され、対応するWorkItemも保持されWorkItem

EF ID解決は、基準に一致する複数のWorkItemNotesが同じWorkItem (参照による)に複数回返されることを保証します。

次は、次のようにWorkItemsだけに戻りたいと思いWorkItems

var workItems = intermediary.Select(x => x.item).Distinct().ToList();

あなたが今これをすれば:

foreach(var workItem in workItems)
{
   Console.WriteLine(workItem.Notes.Count)
}

元のフィルタと一致するWorkItemNotesが各workItem Notesコレクションに追加されていることがworkItemます。

これはRelationship Fixupと呼ばれるものが原因です。

すなわちこれはあなたが条件付き包含を望むものをあなたに与える。

お役に立てれば

アレックス



Related

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