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

时间:2018-12-20 15:24:04

标签: c# linq linq-to-sql

我陷入了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();  

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

2 个答案:

答案 0 :(得分:1)

尝试以下操作:

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();  

答案 1 :(得分:0)

如果我对您的理解正确:

    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();
相关问题