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