Linq to Entities 3.5, где самая последняя дата

У меня есть таблица, и для примера скажем, что у нее есть три столбца: Name, DateAdded, Note. В этой таблице будет несколько записей с одинаковым именем. Мне нужно предложение linq where, которое даст мне набор результатов с самой последней записью для каждого имени.

Итак, если бы у меня была следующая информация:

Name, DateAdded, Note
Alpha, 1/1/2010, note one
Alpha, 1/2/2010, note two
Alpha, 1/3/2010, note three
Beta, 1/4/2010, note four
Beta, 1/5/2010, note five

Я ожидал получить следующие результаты:

Name, DateAdded, Note
Alpha, 1/3/2010, note three
Beta, 1/5/2010, note five

На практике это будет вариант поиска, поэтому мне нужно, чтобы это было предложение .Where, которое я могу добавить в коллекцию IQueryable, если это возможно.


person William    schedule 27.08.2010    source источник


Ответы (1)


from row in rows
group row by row.Name into grouping
from g in grouping
where g.DateAdded == grouping.Max(x => x.DateAdded)
select g;

Если в какой-либо группе имеется более одной строки с максимальным значением DateAdded, это возвращает все такие строки.

Вам не нужно только одно предложение Where. Если rows - это IQueryable, то результат этого запроса тоже, поэтому вы можете использовать его как часть цепочки. Но я понятия не имею, насколько хорошо этот запрос переводится в SQL.

person svick    schedule 27.08.2010
comment
Вместо этого вы можете попробовать что-то вроде where g == grouping.OrderByDescending(x => x.DateAdded).First(), чтобы получить по одной строке для каждой группы. - person Albin Sunnanbo; 28.08.2010
comment
Я не уверен, почему ваш код не работал у меня, но я смог сделать это вот так: results = results.Where (i = ›i.DateAdded == context.rows.Where (o =› o.row .name == i.row.name) .OrderByDescending (o = ›o.DateAdded) .FirstOrDefault (). DateAdded); Спасибо за помощь. - person William; 28.08.2010