2014-04-18 57 views
0

我試圖選擇最後一排使用linq多個表的數值爲sql的LINQ到SQL選擇在連接表

這是我寫的代碼:

var query = (from p in context.Personel 
join y in context.PerLanguage on p.ID equals y.ID 
where p.Resign == false && p.KGBT > new DateTime(2012,1,15) 
select new{ p.ID,p.NameSurname, y.EarnedDate,y.Degree}).ToList(); 

PerLanguage有一個外鍵「ID」到Personel。所以PerLanguage表可以有兩個或更多具有相同ID的數據。我期待這段代碼返回給我一個具有不同人的「最後」輸入語言數據的項目列表。

這樣做的最佳方法是什麼?

+0

你應該p.Id組和由EarnedDate上升 – Andrew

+0

@Andrew ID進行排序組中選擇第一個記錄是不是唯一的,但我可以通過訂購y.EarnedDate我想嘗試一下。我會試一試。 thnks – rentire

+0

@Andrew我試過了,但它給出了一些不應該給出的數據。 'var query =(from p in context.Personel join y in context.PerLanguage on p.ID equals y.ID where p.Resign == false && p.KGBT> new DateTime(2012,1,15)orderby p .EarnedDate descending select new {p.ID,p.NameSurname,y.EarnedDate,y.Degree})。ToList();' – rentire

回答

0

嘗試以下查詢..基本上,我們進行連接,獲得平坦的結果,按ID對它進行分組,並對結果進行降序排序,然後在每個分組結果中選擇第一條記錄。

var results = context.Personel.Where(p => !p.Resign && p.KGBT > new 
DateTime(2012,1,15)).Join(context.PerLanguage, p => p.ID, pl => pl.ID, (p, pl) => 
new { p.ID, p.NameSurname, pl.EarnedDate, pl.Degree }).GroupBy(r => r.ID) 
.Select(g => g.OrderByDescending(r => r.EarnedDate).First()).ToList();