Группируйте элементы и выбирайте конкретный элемент из каждой группы с помощью LINQ

Для этого должен быть однострочный файл, и я просто не могу его найти.

Учитывая этот запрос:

from x in new XPQuery<XPContent>(s)
select new { x.Category, x.ContentType, x.Name, x.ContentID, x.Date }

Мне нужно выбрать запись с наибольшей датой для каждого отдельного ContentID. Можно ли это сделать с умом с помощью LINQ? Прямо сейчас я делаю следующее:

var q = (from x in new XPQuery<XPContent>(s)
            select new { x.Category, x.ContentType, x.Name, x.ContentID, x.Date }).ToList();

var r = q.ToLookup(item => item.ContentID);
foreach (var rItem in r) {
    var s = rItem.OrderByDescending(a => a.Date).First();
    /* do stuff with s */
}

... но ToLookup кажется неуклюжим. Или у меня есть лучшее (простейшее) решение?

Кроме того, я знаю, что мне не следует использовать ToList, но, пожалуйста, пока проигнорируйте его.

Заранее спасибо!

5
задан Ben H 16 February 2011 в 06:28
поделиться