具有條件包含的EF查詢

entity-framework

我有兩個表:一個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集合中。

這是因為稱為關係修復的東西。

也就是說,這給了你想要條件的東西。

希望這可以幫助

亞歷克斯



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因