LINQ to SQL GroupBy Max () лямбда - PullRequest
       0

LINQ to SQL GroupBy Max () лямбда

6 голосов
/ 16 февраля 2012

Пожалуйста, помогите мне преобразовать это в лямбда-выражение

SELECT [UserID], MAX(Created) Created
FROM [UserHistory]
WHERE userid IN (14287)
GROUP BY [UserID]

Спасибо!

РЕДАКТИРОВАТЬ: Вот что у меня есть.

List<T> list;  //list is populated

table.Where(x => list.Select(y => y.ClientId).Contains( x.UserID))
                    .GroupBy(x => x.UserID)
                    .Select(x => new { x.UserID, x.Created })
                    .ToList();

Когда я добавляюGroupBy, мой выбор говорит, что нет определения для x.UserID и x.Created.

Ответы [ 3 ]

13 голосов
/ 16 февраля 2012

Вот, пожалуйста:

var userIDs = new[] {14287, };

var results =
dataContext.UserHistories
.Where(user => userIDs.Contains(user.userID))
.GroupBy(user => user.userID)
.Select(
     userGroup =>
         new 
         {
             UserID = userGroup.Key,
             Created = userGroup.Max(user => user.Created),
         });
0 голосов
/ 16 февраля 2012

Что касается вашего редактирования, как я уже сказал в комментарии, в .Select(x => new { x.UserID, x.Created }), x равно больше не a UserHistory, это IGrouping<int, UserHistory> (1), которое не имеет UserID и Created свойства, но только Key свойство, которое является идентификатором пользователя и реализует IEnumerable для перечисления всех элементов для данного ключа (идентификатора пользователя).

Используйте фрагмент @DaveShaw, так как он самый правильный и самый эффективный.

(1) Я полагаю, UserID - это int.

0 голосов
/ 16 февраля 2012
var query = from history in context.UserHistories
                where ( new[] {14287} ).Contains(history.userID)
                group history by history.UserID into g
             select new 
             {
                 UserId = g.Key,
                 MaxCreated = g.Max( x => x.Created)
             };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...