2017-06-14 96 views
0

我有一個沒有外鍵的表(我不能控制這個不幸)。我試圖返回一個實體和它的相關集合,如下所示:實體框架linq查詢返回子集合

from charity in context.Charities 
join registration in context.Registrations on charity.RegisteredNumber equals registration.RegisteredNumber 
join annualReturn in context.AnnualReturns on charity.RegisteredNumber equals annualReturn.RegisteredNumber 
select new { Charity = charity, Registration = registration, AnnualReturn = annualReturn} 

這將返回我的慈善機構的名單具有相關注冊(這是正確的)。

但慈善機構有多個AnnualReturn而這只是返回一個單一的。這可能是這個匿名對象內的集合嗎?

我在尋找的輸出線沿線的:

{ Charity = singleCharity, Registration = singleRegistration, AnnualReturns = List<AnnualReturn>}

感謝

+0

請問,你能指定你期待的結果嗎?你想在匿名對象中收集AnnualReturn? – octavioccl

+0

@octavioccl我已經添加了我的預期輸出 – ADringer

+0

請注意,您可以在EF模型中聲明不存在於數據庫中的導航屬性和ForeignKey列。 –

回答

0

讓我們試試這個....

from ar in context.AnnualReturns 
group ar by annualReturn.RegisteredNumber into annualReturn 
join charity in context.Charities 
       on annualReturn.Key equals charity.RegisteredNumber 
join registration in context.Registrations 
       on charity.RegisteredNumber equals registration.RegisteredNumber 
select new { Charity = charity, Registration = registration, AnnualReturn = annualReturn } 
+0

這將返回重複的慈善機構和註冊每年回報發現不是嗎?我可能會有更多的收藏添加到慈善機構,所以我認爲慈善機構需要成爲根實體 – ADringer

+0

否。「group..by」爲每個「RegisteredNumber」提供一個年度返回對象。並且年度返回對象本身就是共享該註冊號的所有AnnualReturns行的集合 –

+0

對不起,沒有看到「group by」行。如果同一級別還有其他館藏,我是否也可以做到這一點? – ADringer

0

也許這就是你正在查找:

from charity in context.Charities 
join registration in context.Registrations on charity.RegisteredNumber equals registration.RegisteredNumber 
select new { Charity = charity, 
      Registration = registration, 
      AnnualReturn = context.AnnualReturns.Where(at=>ar.RegisteredNumber==charity.RegisteredNumber)}