LINQ链式调用常用语法外,还有一些其他的方法和操作符可以使用。
分组(Grouping)的高级用法:
除了使用GroupBy方法外,还可以使用ThenBy和ThenByDescending对分组后的结果进行二次排序。
var groupedItems = source.GroupBy(item => item.Category)
.OrderBy(group => group.Key)
.ThenBy(group => group.Average(item => item.Value));元素查找(Element Lookup):
使用FirstOrDefault、SingleOrDefault、LastOrDefault等方法在集合中查找元素,并返回第一个、唯一一个或最后一个满足条件的元素,如果没有找到则返回默认值。
var firstOrDefaultItem = source.FirstOrDefault(item => item.SomeProperty == someValue);
var singleOrDefaultItem = source.SingleOrDefault(item => item.SomeProperty == someValue);
var lastOrDefaultItem = source.LastOrDefault(item => item.SomeProperty == someValue);聚合函数(Aggregation Functions):
除了Count、Sum、Average、Min、Max等聚合函数外,还可以使用Aggregate方法进行更复杂的聚合操作。
var total = source.Aggregate(0, (accumulator, item) => accumulator + item.Value);集合操作(Set Operations):
使用Distinct、Union、Intersect、Except等方法进行集合操作,如去重、求并集、交集、差集等。
var distinctItems = source.Distinct();
var unionItems = collection1.Union(collection2);
var intersectItems = collection1.Intersect(collection2);
var exceptItems = collection1.Except(collection2);转换(Conversions):
使用ToArray、ToList、ToDictionary等方法将IEnumerable<T>转换为其他集合类型。
var array = source.ToArray();
var list = source.ToList();
var dictionary = source.ToDictionary(item => item.Key, item => item.Value);索引和范围(Indexing and Ranging):
使用Range方法生成一个数字序列,以及ElementAt和ElementAtOrDefault方法通过索引访问元素。
var numbers = Enumerable.Range(1, 10); // 生成1到10的数字序列
var element = source.ElementAt(index); // 通过索引访问元素生成序列(Generating Sequences):
使用Repeat、Empty、Range等方法生成特定的序列。
var repeatedItem = Enumerable.Repeat(item, count); // 重复生成指定元素
var emptySequence = Enumerable.Empty<T>(); // 生成空序列自定义比较器(Custom Comparers):
在排序和分组操作中,可以使用自定义的比较器来定义排序和分组逻辑。
var sortedItems = source.OrderBy(item => item.SomeProperty, new CustomComparer());
