增加的 LINQ 表达式

来源:互联网 发布:apache cgi原理 编辑:程序博客网 时间:2024/05/22 19:27

我们一般说的 LINQ 是指 LINQ 表达式,但除了表达式以外,LINQ 查询操作更方便,凡是实现了接口 IEnumerable<T> 或 IQueryable<T> 的,都可以用 LINQ 查询操作。

1、投影

Select

int[] arr = { 1, 2, 3, 7, 8, 9, 6, 5, 4 };
var items = arr.Select(i => i);
foreach (var m in items)
{
    Console.WriteLine(m.ToString() + "<br>");
}

显示:1 2 3 7 8 9 6 5 4

 

如果改变 Lambda 表达式那句为 var items = arr.Select(i => i + 3);,那么输出时每一项元素的值将比现有基础上大 3,即:4、5、6、10、11、12、9、8、7。

 

SelectMany

int[] arr = { 1, 2, 3, 7, 8, 9, 6, 5, 4 };
int[] arr2 = { 3, 2, 1 };
List<int[]> list = new List<int[]>();
list.Add(arr);
list.Add(arr2);
var items = list.SelectMany(i => i);
foreach (var m in items)
{
    Response.Write(m.ToString() + "<br>");
}

显示:1 2 3 7 8 9 6 5 4 3 2 1

2、聚合

 int[] arr = new int[] { 5, 1,2,3}; 

Console.WriteLine(arr.Aggregate((s, m) => ((s < 3) ? 0 : s) + ((m % 3 == 0) ? m : 0)) + "<br>");

Aggregate 是自定义聚合计算,功能强大。

上面的 Lambda 表达式 (s, m) =>((s < 3) ? 0 : s) + ((m % 3 == 0) ? m : 0)。

表示对每个元素执行这个函数:执行第一个元素时,把第一个元素的值传给 s 和 m;执行后面的元素时,把上一个元素执行时的结果传给 s,把当前元素值传给 m。

3、筛选

Where

int[] arr = { 1, 2, 3, 7, 8, 9, 6, 5, 4 };
var items = arr.Where(i => i > 3 && i < 8);
foreach (var m in items)
{
    Console.WriteLine(m.ToString() + "<br>");
}

Lambda 表达式 i => i > 3 && i < 8 表示只选择 > 3 且 < 8 的元素,显示为:7 6 5 4

上面的where调用等价与如下的子句:

var elements=from ele in arr

where eld>= 3 && ele  < 8

select ele;

4、排序

OrderBy

int[] arr = { 1, 2, 3, 7, 8, 9, 6, 5, 4 };
var items = arr.OrderBy(i => i);

按 1、2、3……排序。

OrderByDescending

int[] arr = { 1, 2, 3, 7, 8, 9, 6, 5, 4 };
var items = arr.OrderByDescending(i => i);

按 9、8、7……排序。

Reverse

int[] arr = { 1, 2, 3, 7, 8, 9, 6, 5, 4 };
var items = arr.Reverse();

倒序,本例中按 4、5、6……输出。

5、组合

可以把投影、聚合、筛选、排序组合起来使用。

int[] arr = { 1, 2, 3, 7, 8, 9, 6, 5, 4 };
var items = arr.Where(i => i > 3).OrderBy(i => i);

把 > 3 的元素按升序排列,显示为:

6、Distinct为一个序列消除元素重复。

使用ToArrayToList操作符,可以将序列转换为类型化的数组和列表。

ToDictionary操作符创建了一个词典,并使用键值组织数据。

7、一些标准的操作符可以对数据进行数学操作:这就是聚合操作符

n     Count,获取序列中元素的个数

n     Sum, 计算元素之和

n     Min Max, 获取序列中元素的最大值很最小值

原创粉丝点击