2014-04-18 58 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();