2012-08-22 230 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 –