繁体   English   中英

Linq Group通过排序,先获取,然后返回列表

[英]Linq GroupBy with sort, take first, and return a list

我陷入了Linq-to-SQL查询。 我有一个项目表,每个用户有多个项目。 我想获取每个用户所有最新项目的列表。 这就是我所拥有的:

var TheList = (from t in MyDataContext.TheTable
               where t.SomeDate > DateTime.UtcNow.AddMonths(-3)

               group t by t.UserID into TheUserGroups
               from g in TheGroups
               orderby g.SomeDate descending

               select new SomeObject()
               {
                     TheUserID = g.UserID,
                     .....
                }).ToList();  

问题在于它返回的是每个用户的所有项目,而不是每个用户的最新元素。 我需要更改什么才能获得预期的结果?

尝试以下操作:

var TheList = (from t in MyDataContext.TheTable
               where t.SomeDate > DateTime.UtcNow.AddMonths(-3)

               orderby g.SomeDate descending

               select new SomeObject()
               {
                     TheUserID = g.UserID,
                })
                .GroupBy(x => x.TheUserID)
                .Select(x => x.FirstOrDefault())
                .ToList();  

如果我正确理解您的意见:

    public class Order
    {
        public int OrderId { get; set; }

        public int UserId { get; set; }

        public DateTime Date { get; set; }

        public string ItemName { get; set; }
    }

    table.Where(o => o.Date < DateTime.UtcNow.AddMonths(-3))
                    .GroupBy(o => o.UserId)
                    .Select(g => new { UserId = g.Key, LastOrder = g.OrderByDescending(o => o.Date).FirstOrDefault() })
.ToList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM