2012-08-22 186 views
1

我有三个表,我用edmx设计器在它们之间添加关联。以下是他们如何链接。LINQ关联 - 实体框架

(表1)贷款 - (表2)投资者:多对一的关系 (表2)投资者 - (表3)InvestorInfo:一对多的关系

我想要得到[1]总贷款新增出售给(投资者ID为& idx是表3的主要关键 - InvestorInfo表)存储在表3中的投资者名称和[3]投资者服务费用。

如何在下面的查询中做到这一点?我不得不选择'FirstOrDefault()'来访问Table3中的任何列(请参见注释行)。如果我使用FirstOrDefualt,我得到一个记录,其中IDX = 1,而不是2005年

var loanPurchaseData = (from cd in entity.Table1 
         //where cd.Table2.Table3.Select(x => x.IDX == 2005) 
         //where cd.ULDD_SET_POOLS.ULDD_SET_POOLDT.FirstOrDefault().SORT_ID == 2005 
         group cd by new { cd.Table4.PurchaseDate, cd.Number } into grp 
         select new 
         { 
          investor = grp.FirstOrDefault().Investor, 
          no_of_loans = grp.Count(),            
          sort_id = grp.FirstOrDefault().Table2.Table3.FirstOrDefault().SORT_ID, 
          service_fee_rate = grp.FirstOrDefault().Table2.Table3.FirstOrDefault().DT_REAL_PERC_VALUE 
         }).ToList(); 

回答

0

你的问题不是很清楚 - 我不明白IDX是表3中的表1或者,你想选择什么,但我会假设你有一个多 - 一多的模式,其中一个Investor有零个或多个Loans &零个或多个InvestorInfos。例如,您想要获得与idx = 2005加入投资者信息的所有贷款。如果我错了,请纠正我,并纠正你的问题,如果我是对的!

从您的InvestorInfo对象开始,您知道只有一个Investor,但会有零个或多个Loans

// only one InvestorInfo for idx, but this isn't clear in your question 
var investorInfo = context.InvestorInfos.SingleOrDefault(i => i.idx == 2005); 

var loans = investorInfo.Investor.Loans; 

你的问题的关键是,你不能得到投资者的信息“贷款服务费”。为什么不?因为那个投资者有5笔贷款。你想要哪一个?

-- we can get the maximum, minimum, sum, etc... 
var max = loans.Max(l => l.DT_REAL_PERC_VALUE); 
var min = loans.Min(l => l.DT_REAL_PERC_VALUE); 
var min = loans.Sum(l => l.DT_REAL_PERC_VALUE); 

同样目前还不清楚是什么你正在尝试做的,也不是你的数据实际上看起来像,但在一对多的关系,你必然有“多”方的一个以上的各'一边。


要获得最大值,请使用Max运算符。

service_fee = grp.Max(l => l.Table2.Table3.Max(t => t.DT_REAL_PERC_VALUE)) 
+0

我更新了我的问题。谢谢! –

+0

那么我的回答是否有帮助? –

+0

编号'DT_REAL_PERC_VALUE'列在贷款对象下不可用。我必须像这样引用它=> l.Table2.Table3.FirstOrDefault()。DT_REAL_PERC_VALUE –