常用扩展方法-2


1. 获取一条数据的方法

  1. Single()和SingleOrDefault() 方法定义:当有且仅有一条满足条件的数据时,返回该数据。而当集合中存在多个满足条件的数据时,Single和SingleOrDefault方法都会报错。

public static TSource Single<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)

该方法同样存在不含筛选条件的重载:

public static TSource Single<TSource>(this IEnumerable<TSource> source)

SingleOrDefault()方法与Single()方法的不同之处在于,当SingleOrDefault()方法遇到没有数据满足条件的情况时,会有一个默认的返回值。根据数据类型的不同,返回值也会不同。与Single()方法相同的是,SingleOrDefault()方法同样有带条件与不带条件的两个版本。

  1. First()和FirstOrDefault() 方法定义:当至少有一条数据满足条件时,返回第一条符合条件的数据。

public static TSource First<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)

不含条件的重载:

public static TSource First<TSource>(this IEnumerable<TSource> source)

FirstOrDefault()方法与First()方法的不同之处在于,First()方法在遇到没有数据满足条件的情况时会直接报错,而FirstOrDefault()方法则会返回一个默认值。根据数据类型的不同,返回值也会不同。

2.排序

  1. OrderBy() 方法定义:对数据进行升序排序。

public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector) =>
            new OrderedEnumerable<TSource, TKey>(source, keySelector, null, false, null);

该方法还可以使用指定的比较器来使数据按升序排序:

public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, IComparer<TKey>? comparer) =>
            new OrderedEnumerable<TSource, TKey>(source, keySelector, comparer, false, null);
  1. OrderByDescending() 方法定义:对数据进行降序排序。

public static IOrderedEnumerable<TSource> OrderByDescending<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector) =>
            new OrderedEnumerable<TSource, TKey>(source, keySelector, null, true, null);

该方法同样拥有使用指定比较器来进行降序排序的重载:

public static IOrderedEnumerable<TSource> OrderByDescending<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, IComparer<TKey>? comparer) =>
            new OrderedEnumerable<TSource, TKey>(source, keySelector, comparer, true, null);

3.多规则排序

  ThenBy()   方法定义:在某种情况下使用其他排序规则进行排序。 例:对Employee中的数据首先使用Age属性进行排序,当出现Age属性相同的情况时,对Age属性相同的数据使用Salary属性进行排序。代码如下:

list.OrderBy(e => e.Age).ThenBy(e => e.Salary);

ThenBy()方法与OrderBy()方法相同,默认使用升序规则。如果进行降序排序,可以使用ThenByDescending()方法。 ThenBy()方法和ThenByDescending()方法都有使用指定比较器来进行排序的重载。

4.限制结果集

  1. Skip() 方法定义:跳过n条数据。

  2. Take() 方法定义:获取n条数据。

注意:Skip()和Take()方法是可以一起使用的。例如var result = list.Skip(3).Take(2),这段代码表示先跳过3条数据,之后获取两条数据返回给result。


总结

方法

作用

返回值

Single

当仅有一条符合条件的数据时,返回该数据

TSource

SingleOrDefault

当仅有一条符合条件的数据时,返回该数据。当没有符合的数据时,返回默认值

TSource

First

当至少有一条符合条件的数据时,返回第一条数据

TSource

FirstOrDefault

当至少有一条符合条件的数据时,返回第一条数据。当没有符合条件的数据时,返回默认值

TSource

OrderBy

将数据进行升序排序

IOrderedEnumerable<>

OrderByDescending

将数据进行降序排序

IOrderedEnumerable<>

ThenBy

多规则排序,升序规则

IOrderedEnumerable<>

ThenByDescending

多规则排序,降序规则

IOrderedEnumerable<>

Skip

跳过n条数据

IEnumerable

Take

获取n条数据

IEnumerable


本文章使用limfx的vscode插件快速发布