c# - 获取订购组的最后一项

标签 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 按 i.UserId 分组到 g
选择 g.OrderByDescending(s => s.StartDate)

然后当我在组上循环时我拿第一个项目
foreach(查询中的 var g)
{
var last = g.First();

最佳答案

你需要这样的东西:

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

关于c# - 获取订购组的最后一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36390474/

相关文章:

c# - Linq关键字提取——限制提取范围

c# - 如何从非泛型方法分派(dispatch)到泛型处理程序?

mysql - 使用更新增加列或创建更新触发器 - mysql

c# - 有没有什么方法可以在不轮询的情况下在服务器中查找新消息?

mysql - sql,只保留最大值,删除其他值

PHP MYSQL 问题 : Cannot fetch database information using $resultDetails->fetch_assoc

c# - MVC Controller : Using LINQ to check for duplicate value already existing in table before Save?

linq - 如何在LINQ-to-Entities 3.5中进行 “where in values”

c# - 匹配日期范围的正则表达式

c# - 如何在鼠标移动时为 C# 中的所有按钮设置手形光标?