簡體   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