我正在尝试使用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对Personel有一个外键“ID”。因此,PerLanguage表可以包含2个或更多具有相同ID的数据。我希望这段代码能够返回一个项目列表,其中包含了“最后”输入的不同人的语言数据。
最好的方法是什么?
答案 0 :(得分:0)
尝试以下查询..基本上我们进行连接,得到平坦的结果,按ID对其进行分组,然后对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();