Linq标准查询操作符

Posted kikyoqiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linq标准查询操作符相关的知识,希望对你有一定的参考价值。

A.1 聚合

  聚合操作符(见表A-1),所有的结果只有一个值而不是一个序列。 Average 和 Sum 针对数值 (任何内置数值类型)序列或使用委托从元素值转换为内置数值类型的元素序列。 Min 和 Max 具有 不同数值类型的重载,不过也只能在对元素类型使用默认比较符或使用转换委托的序列上进行操 作。 Count 和 LongCount 是等价的,不同之处仅仅在于返回类型。它们两者都具有两个重载—— 一个只统计序列长度,一个可以接受谓词,即只统计与谓词匹配的元素。

            string[] words = { "zero", "one", "two", "three", "four" };
            int[] number = { 0, 1, 2, 3, 4 };

            var n1 = number.Sum();
            var n2 = number.Count();
            var n3 = number.Average();
            var n4 = number.LongCount(x => x % 2 == 0);
            var n5 = number.Aggregate("seed", (current, item) => current + item, result => result.ToUpper());

            var w1 = words.Min(word => word.Length);
            var w2 = words.Max(word => word.Length);

  最常见的聚合操作符就是 Aggregate (表A-1最后一行)。所有的其他聚合操作符都能表示 为对 Aggregate 的调用,虽然这样做会相对繁琐。其基本思想就是,总是存在以初始元素开头的 “当前结果”。聚合委托被应用于输入序列的每个元素;委托取得当前结果和输入元素,并生成下 一个结果。作为最终可选步骤,转换被应用于聚合结果上,并将其转换为这个方法的返回值。如 果有必要,这种转换可以产生不同的数据类型。这虽然不像听起来那么复杂,不过你依旧不希望 频繁地使用它。

  所有的聚合操作符都使用立即执行的模式。没有使用谓词的 Count 方法的重载为实现了 ICollection 和 ICollection<T> 的类型进行了优化。届时,将使用集合的 Count 属性,无须读 取任何数据 。

A.2 连接

  只存在一个连接操作符: Concat (见表A-2)。如你所料,它会对两个序列进行操作,并 返回一个单独的序列,该序列中包含了第1个序列和第2个序列中所有元素,且第2个序列连接 在第1个序列的后面。两个输入序列必须具有相同的类型,使用延迟执行模式,并且均为流式 数据。

1             int[] number = { 0, 1, 2, 3, 4 };
2             var n = number.Concat(new[] { 1, 2, 3 });

 

以上是关于Linq标准查询操作符的主要内容,如果未能解决你的问题,请参考以下文章

LINQ基础

Linq to Object之非延迟标准查询操作符

LinQ 简单使用

C#图解教程 第十九章 LINQ

LinQ的简单使用

linq简介