2010-01-10 38 views
5

實體框架中有兩個實體Parent和Child。如何在單個實體框架查詢中返回許多子集合Count()

父級擁有子實體的集合。在我的查詢中,我只想返回父實體(完全類型的EF類型)和子實體的Count()(這可以設置爲父類的屬性),但我只想要在一次調用數據庫的情況下執行此操作,而無需編寫自定義S-Proc。這可能嗎?

必要,我希望把它變成一個查詢:

EFContext content = new EFContext(); 
IQueryable<Parent> parentQuery = context.Parent.Select(); 
foreach(Parent parent in parentQuery) 
{ 
    parent.NoChildItems = parent.Childs.Count(); 
} 

當我激活此此枚舉,它要求清單數據庫,並再次對每個計數()查詢。我每次返回約100件物品,因此不會僅僅爲了兒童物品的數量而打100個單獨的電話。

感謝您的任何幫助。

回答

9

這應該工作:

IQueryable parentQuery = context.Parent.Select(p => new { Parent = p, ChildCount = p.Childs.Count() }); 

編輯

如果定義:

public class ParentModel 
{ 
    public Task Parent { get; set; } 
    public int ChildCount { get; set; } 
} 

可以使用

IQueryable parentQuery = context.Parent.Select(p => new ParentModel { Parent = p, ChildCount = p.Childs.Count() }); 

編輯

你也可以這樣做:

var parentQuery = context.Parent.Select(p => new { Parent = p, ChildCount = p.Childs.Count() }).ToList(); 
parentQuery.ForEach(p => p.Parent.ChildCount = p.ChildCount); 
var result = return parentQuery.Select(p => p.Parent); 

短,你有你的填充性能。

+0

謝謝你的回答,但是有沒有辦法做到這一點,而不使用匿名類? – James 2010-01-10 12:45:42

+0

以爲你會這麼說!沒關係,謝謝你的幫助。 – James 2010-01-10 12:53:08

+1

上述解決方案,但會導致多個數據庫調用。如何在一次調用ParentModel中的所有記錄時檢索計數? – 2017-08-07 14:36:55