Linq GroupBy с сортировкой, сначала возьми, и верни список - PullRequest
0 голосов
/ 20 декабря 2018

Я застрял в запросе 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 голосов
/ 20 декабря 2018

Попробуйте следующее:

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();  
0 голосов
/ 20 декабря 2018

Если я вас правильно понял:

    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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...