Учитывая ваше обновленное объяснение, вот мое предлагаемое решение. Я также немного почистил код.
var grouped = from item in table
group item by item.Id into g
let itemMaxDate = g.MaxBy(i => i.Date)
select new FooObject()
{
Id = g.Key,
Name = itemMaxDate.Name,
Date = itemMaxDate.Date
};
Затем необходимо определить метод расширения MaxBy
. (К сожалению, в LINQ есть один встроенный.)
public static TSource MaxBy<TSource, TResult>(this IEnumerable<TSource>
collection, Func<TSource, TResult> func)
{
var comparer = Comparer<TResult>.Default;
TSource maxItem = null;
foreach (var item in collection)
{
if (comparer.Compare(item, maxItem) > 0)
maxItem = item;
}
return maxItem;
}
Я считаю, что это должно быть то, что вы хотите сейчас. Дайте мне знать, если он сделает эту работу за вас.