Хотя решение, опубликованное Барри, должно работать (с несколькими исправлениями), оно является неоптимальным: вам не нужно сортировать коллекцию, чтобы найти элемент с максимальным значением поля.Я написал метод расширения WithMax
, который возвращает элемент с максимальным значением указанной функции:
public static T WithMax<T, TValue>(this IEnumerable<T> source, Func<T, TValue> selector)
{
var max = default(TValue);
var withMax = default(T);
bool first = true;
var comparer = Comparer<TValue>.Default;
foreach (var item in source)
{
var value = selector(item);
int compare = comparer.Compare(value, max);
if (compare > 0 || first)
{
max = value;
withMax = item;
}
first = false;
}
return withMax;
}
Он повторяет коллекцию только один раз, что намного быстрее, чем сортировка, чтобы получить первыйitem.
Вы можете использовать его следующим образом
var query =
from row in table.AsEnumerable()
group row by row.Field<int>("MOID") into g
select g.WithMax(r => r.Field<int>("radi"));