Q
Легче на практике разобраться, потыкаться
Size: a a a
Q
MN
Q
Q
MN
MN
MN
MN
MN
ES
ES
MN
DistinctBy
, ExceptBy
, IntersectBy
, UnionBy
¸ MinBy
и MaxBy
. Первые 4 позволяют работать с коллекциями как со множествами. Для них предусмотрен делегат keySelector
, возвращающий ключ для сравнения. Методы позволят выполнять операцию сравнения на подмножестве данных, а не на всей коллекции. Их можно использовать для повышения производительности или для обеспечения настраиваемого поведения без потери исходных данных. Например, имея коллекции всех заказов и завершённых заказов:IEnumerable<Order> all = GetAll();Получить незавершённые заказы можно с помощью
IEnumerable<Order> completed = GetCompleted();
ExceptBy
, сравнивая элементы по свойству ID:IEnumerable<Order> remaining =В отличие от варианта с использованием
all.ExceptBy(completed, o => o.ID);
Where
, который менее интуитивно понятен и выполняется за квадратичное время (O(M*N)).MinBy
и MaxBy
вместо селектора ключей предоставляется селектор элементов. Они вернут элемент коллекции с наибольшим/наименьшим значением соответственно, в отличие от существующих Min
и Max
, которые возвращают само значение. Кроме того, в каждый из методов (в том числе и Min
и Max
) можно будет передать необязательный объект-компаратор.DistinctBy
и MinBy
с компаратором:public static IEnumerable<TSource>Улучшение в *OrDefault
DistinctBy<TSource, TKey>(
this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector);
public static TSource
MinBy<TSource, TResult>(
this IEnumerable<TSource> source,
Func<TSource, TResult> selector,
IComparer<TResult>? comparer);
Single
, First
или Last
передаётся пустая коллекция. В этой функции теперь можно будет переопределить возвращаемое значение по умолчанию: public static TSourceПримечание: обратите внимание, что во всех описанных выше методах расширения есть как версия
SingleOrDefault<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate,
TSource defaultValue);
IEnumerable
, так и версия IQueryable
. Все новые API, возвращающие IEnumerable
, должны включать соответствующую версию IQueryable
. Это не позволит пользователю API преобразовать запрос в обычное перечисление, не осознавая этого.L
MN
DistinctBy
им респект.L
L
FO
FO
L