获取订购的组最后一项

时间:2016-04-03 20:00:20

标签: c# mysql linq entity-framework-6

我有与用户相关的项目列表。

每个项目都有一个日期 我想得到每个用户的最后一项(按日期)

例如,如果数据是:

Id1, User1, 1.1.16 
Id2, User2, 2.1.16 
Id1, User1, 4.1.16 
Id4, User2, 3.1.16 
Id3, User1, 2.1.16 
Id4, User2, 5.1.16 

它应该返回每个用户的最后一项(按日期):

Id1 User1 4.1.16
Id4 User2 5.1.16

我的询问是:

from sf in db.Items
where ...
group i by i.UserId into g
select g.OrderByDescending(s => s.StartDate).FirstOrDefault();


由于某种原因,它总是获得用户的第一项 当我打印所有组及其项目时,它看起来没问题 第一项是每组中的最后一项,但查询不会返回它。

我试图改为g.OrderBy ..没有帮助 还尝试添加g.ToList() ...
如何获得每个用户的最新项目?

如果我将查询更改为
,它确实有效 ... 将i.UserId分组为g
选择g.OrderByDescending(s => s.StartDate)

并且当我在群组上循环时,我采取第一项目 foreach(查询中的var g)
{
 var last = g.First();

1 个答案:

答案 0 :(得分:1)

你需要这样的东西:

var result = from sf in db.Items
             where ...
             group i by i.UserId into gr
             select new 
             {
                 UserId = gr.Key
                 LatestItem = gr.OrderByDescending(s => s.StartDate)
                                .FirstOrDefault()
             };

完成分组后,您将每个组投影到具有两个属性的匿名类型对象。第一个属性是组的密钥UserId。第二个是此用户的LatestItem