码迷,mamicode.com
首页 > 其他好文 > 详细

LINQ标准查询操作符(三)——Aggregate、Average、Distinct、Except、Intersect、Union、Empty、DefaultIfEmpty、Range、Repeat

时间:2015-04-07 17:29:17      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:

本文来自:http://blog.csdn.net/xuejianwu/article/details/6931903

 

七、聚合操作符

聚合函数将在序列上执行特定的计算,并返回单个值,如计算给定序列平均值、最大值等。共有7种LINQ聚合查询操作符:Aggregate、Average、Count、LongCount、Max、Min和Sum。

1. Aggregate

Aggregate操作符对集合值执行自定义聚合运算。例如,需要列出所有产品类别清单,每个类别名称之间用顿号连接。以下的代码演示了这一过程:

[csharp] view plaincopy
 
  1. using (NorthwindDataContext db = new NorthwindDataContext())  
  2. {  
  3.     db.Log = Console.Out; //将生成的T-SQL语句输出到控制台中  
  4.     //方法语法  
  5.     var q =  
  6.         db.Categories  
  7.         .Select(c => c.CategoryName)  
  8.         .ToArray()  
  9.         .Aggregate((current, next) => String.Format("{0}、{1}", current, next));  
  10.     Console.WriteLine(q);  
  11. }  

如果你对这一过程有些迷惑,那么请参照以下代码:

[csharp] view plaincopy
 
  1. var query =  
  2.     db.Categories  
  3.     .Select(c => c.CategoryName)  
  4.     .ToArray();  
  5. string r = String.Empty;  
  6. foreach (var item in query)  
  7. {  
  8.     r += "、";  
  9.     r += item;  
  10. }  
  11. r = r.Substring(1); //去除第一个顿号  
  12. Console.WriteLine(r);  

 

2. Average

求集合中元素的平均值,返回值类型double

3. Count

求集合中元素的个数,返回值类型Int32

4. LongCount

求集合中元素的个数,返回值类型Int64

5. Max

求集合中元素的最大值

6. Min

求集合中元素的最小值

7. Sum

求集合中元素的和

八、集合操作符

LINQ 中的集合操作符是指根据相同或不同集合(或集)中是否存在等效元素来生成结果集的查询操作,一共有4种:

方法名

说明

Distinct

从集合移除重复值。

技术分享

Except

返回差集,差集是指位于一个集合但不位于另一个集合的元素。

技术分享

Intersect

返回交集,交集是指同时出现在两个集合中的元素。

技术分享

Union

返回并集,并集是指位于两个集合中任一集合的唯一的元素。

技术分享

使用方式均为“集合1.方法名(集合2)”,返回值为运算结果的集合,这里就不演示了。

九、生成操作符

生成是指创建新的值序列。

1. Empty

Empty操作符返回一个指定类型的空集合。这里的空不是null,而是元素数量为0的集合。以下的示例演示了如何创建一个IEnumerable<int>类型的空集合:

[csharp] view plaincopy
 
  1. var q = Enumerable.Empty<int>();  
  2. Console.WriteLine(q == null);  
  3. Console.WriteLine(q.Count());  

 

2. DefaultIfEmpty

DefaultIfEmpty将空集合替换为具有默认值的单一实例集合。执行此方法获得的集合将至少含有一个元素,这是因为DefaultIfEmpty方法需要两个参数,第一个参数是一个泛型集合,第二个参数是相应类型的单个元素,如果第一个参数中不含有任何元素,它将返回第二个参数指定的单个元素。如果你使用了DefaultIfEmpty方法的重载方法DefaultIfEmpty<T>(IEnumerable<T> array),如果指定的array集合为空,那么将返回一个类型为T,值为null的单个对象。以下的代码演示了这一过程:

[csharp] view plaincopy
 
  1. using (NorthwindDataContext db = new NorthwindDataContext())  
  2. {  
  3.     db.Log = Console.Out; //将生成的T-SQL语句输出到控制台中  
  4.     //方法语法  
  5.     var q =  
  6.         Enumerable.DefaultIfEmpty  
  7.         (  
  8.             db.Employees  
  9.             .Where(e => e.FirstName.StartsWith("Aaf")) //更改此处的条件可获得不同的集合  
  10.             , new Employees() { FirstName = "Sunny D.D" }  
  11.         );  
  12.     Console.WriteLine(q.Count());  
  13.     foreach (var item in q)  
  14.     {  
  15.         Console.WriteLine(item.FirstName);  
  16.     }  
  17. }  

 

3. Range

Range操作符用于生成指定范围内的整数的序列。它需要两个参数,第一个参数是序列开始的整数值,第二个参数是序列中整数的数量。下面的示例演示了使用Range操作符来生成从0到9的整数序列:

[csharp] view plaincopy
 
  1. var q =  
  2.     Enumerable.Range(0, 10);  
  3. foreach (var item in q)  
  4. {  
  5.     Console.WriteLine(item);  
  6. }  

 

4. Repeat

Repeat操作符用于生成包含一个重复值的集合。它需要两个参数,第一个参数是任意类型的元素,第二个参数是生成的序列中所包含此元素的数量。下面的示例演示了使用Repeat来生成一个包含10个0的序列:

[csharp] view plaincopy
 
  1. var q =  
  2.     Enumerable.Repeat(0, 10);  
  3. foreach (var item in q)  
  4. {  
  5.     Console.WriteLine(item);  
  6. }  

LINQ标准查询操作符(三)——Aggregate、Average、Distinct、Except、Intersect、Union、Empty、DefaultIfEmpty、Range、Repeat

标签:

原文地址:http://www.cnblogs.com/zhouyunbaosujina/p/4398567.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!