Как использовать LINQ для выбора объекта с минимальным или максимальным значением свойства
К сожалению, для этого нет .cs-file встроенного метода, но его .cs-file достаточно легко реализовать c-sharp самостоятельно. Вот его суть:
public static TSource MinBy(this IEnumerable source,
Func selector)
{
return source.MinBy(selector, null);
}
public static TSource MinBy(this IEnumerable source,
Func selector, IComparer comparer)
{
if (source == null) throw new ArgumentNullException("source");
if (selector == null) throw new ArgumentNullException("selector");
comparer ??= Comparer.Default;
using (var sourceIterator = source.GetEnumerator())
{
if (!sourceIterator.MoveNext())
{
throw new InvalidOperationException("Sequence contains no elements");
}
var min = sourceIterator.Current;
var minKey = selector(min);
while (sourceIterator.MoveNext())
{
var candidate = sourceIterator.Current;
var candidateProjected = selector(candidate);
if (comparer.Compare(candidateProjected, minKey) < 0)
{
min = candidate;
minKey = candidateProjected;
}
}
return min;
}
}
Пример c#-language использования:
var firstBorn = People.MinBy(p => p.DateOfBirth ?? DateTime.MaxValue);
Обратите внимание, что c#-language это вызовет исключение, если visual-c# последовательность пуста, и c#-language вернет элемент first с минимальным visual-c# значением, если их больше dotnet одного.
В качестве альтернативы dotnet вы можете использовать реализацию, которую csharp мы получили в MoreLINQ, в MinBy.cs. (Конечно, есть c# соответствующий MaxBy
.)
Установить visual-c# через консоль диспетчера linq-query-syntax пакетов:
PM> Установочный .cs-file пакет morelinq
c#
.net
linq
Как использовать LINQ для выбора объекта с минимальным или максимальным значением свойства
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.