LINQ to SQL самый последний набор записей для данного идентификатора? - PullRequest
0 голосов
/ 23 августа 2010

Это должно быть просто.

У меня есть таблица отзывов с записями.Столбцами являются EntityID, UserID, Body, DateModified.Пользователь может подать несколько записей для сущности.Я хочу выбрать все Обзоры, которые являются самыми последними записями для данного объекта для UserID.

Таким образом, таблица может выглядеть следующим образом:

EntityID     UserID     Body     DateModified
1            101        "hey"    8/22/2010 11:36:47 PM
1            101        "dude"   8/11/2010 04:15:43 PM
1            108        "brah"   8/21/2010 11:31:11 PM
1            108        "sup?"   8/14/2010 10:00:00 PM

У меня есть что-то вроде этого:

 var itemReviews = db.Reviews
                             .Where(x => x.EntityID == EntityID)
                             .OrderByDescending(x => x.DateSubmitted)
                             ;

Что мне нужно добавить, чтобы получить только записи для самого последнего EntityID?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 23 августа 2010

Чтобы получить самый последний обзор:

var mostRecentReview = db.Reviews
                         .Where(x => x.EntityID == EntityID)
                         .OrderByDescending(x => x.DateSubmitted)
                         .First();

Чтобы получить самый последний отзыв для каждого пользователя:

var reviews = db.Reviews
                .Where(x => x.EntityID == EntityID)
                .GroupBy(x => x.UserID)
                .Select(gr => new {
                    UserID = gr.Key,
                    MostRecentReview = gr.OrderByDescending(x => x.DateSubmitted)
                                         .First()
                });
0 голосов
/ 23 августа 2010

много способов вы можете использовать, один из способов:

var mostRecentReview = db.Reviews
                     .Where(x => x.EntityID == EntityID).Max(x =>x.DateModified);
0 голосов
/ 23 августа 2010

Если вы хотите вернуть набор элементов (sql top / limit), вы можете использовать Take

var itemReviews = db.Reviews
                    .Where(x => x.EntityID == EntityID)
                    .OrderByDescending(x => x.DateSubmitted)
                    .Take(4);

Если вы также хотите сделать пейджинг, вы можете использовать Skip

var itemReviews = db.Reviews
                    .Where(x => x.EntityID == EntityID)
                    .OrderByDescending(x => x.DateSubmitted)
                    .Skip(pageNo *pageSize).Take(pageSize);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...