[英]EF Query With Conditional Include
我有兩個表:一個WorkItem表和一個WorkItemNote表。 如何返回符合特定條件的WorkItem和所有WorkItemNotes?
我認為這應該很簡單,幾乎就像有條件的“包含”一樣,對吧?
我一直在計划寫一個關於這個的小費 ,但是你的問題讓我很震驚。
假設WorkItem
有許多WorkItemNotes
你可以這樣做:
var intermediary = (from item in ctx.WorkItems
from note in item.Notes
where note.SomeProp == SomeValue
select new {item, note}).AsEnumerable();
這會為每個匹配的WorkItemNote
生成一個匿名元素,並保存相應的WorkItem
。
EF標識解析確保如果具有與條件匹配的多個WorkItemNotes
,則多次返回相同的WorkItem
(通過引用)。
我假設接下來你只想回到WorkItems
,就像這樣:
var workItems = intermediary.Select(x => x.item).Distinct().ToList();
那么如果你現在這樣做:
foreach(var workItem in workItems)
{
Console.WriteLine(workItem.Notes.Count)
}
您將看到與原始過濾器匹配的WorkItemNotes
已添加到每個workItem
的Notes集合中。
這是因為稱為關系修復的東西。
也就是說,這給了你想要條件的東西。
希望這可以幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.