Linq初级班 标准查询操作符的使用和调用

简介:

标准查询操作符

本文章是我最近学习Linq的一些示例,分享给和我一样刚开始接触Linq的朋友们作为一个参考,因为是初学,肯定有很多不足,因此希望大家友善提醒,切勿针锋相对,我会及时改正的~~

目录

01 投影操作符(Select,SelectMany)

02 限制操作符(Where)

03 排序操作符(OrderBy,OrderByDescending,ThenBy,ThenByDescending,Reverse)

04 联接操作符(join,GroupJoin)

05 分组操作符(GroupBy)

06 串联操作符(Concat)

07 聚合操作符(Aggregate,Average,Count,LongCount,Max,Min,Sum)

08 集合操作符(Distinct,Union,Intersect,Except)

09 生成操作符(Empty,Range,Repeat)

10 转换操作符(Cast,OfType,ToArray,ToDictionary,ToList,ToLookup)

11 元素操作符(DefaultIfEmpty,ElementAt,ElementAtOrDefault,First,Last,FirstOrDefault,LastOrDefault,Single,SingleOrDefault)

12 相等操作符(SequenceEqual)

13 量词操作符(All,Any)

14 分割操作符(Skip,SkipWhile,Take,TakeWhile)

01.投影操作符(Select,SelectMany)

(1)Select操作符对单个序列或者集合中的值进行投影,可以控制从序列中返回指定的列.

方法语法:

ContractedBlock.gif 代码
查询语法:
 
   
var query = from u in users select new { u.FirstName };
运行结果:

2010122821544190.jpg

 (2)SelectMany操作符提供了将多个from子句组合起来的功能,它将每个对象的结果合并成单个序列.

ContractedBlock.gif 代码

运行结果:

2010122822263354.jpg

02.限制操作符(Where)

(1)Where是限制操作符,可以对序列中的值进行过滤.Where操作符不启动查询的执行.但开始对对象进行迭代的时候才将过滤器应用到数据上.

方法语法:

ContractedBlock.gif 代码

查询语法:

 
   
var query = from n in names where n.StartsWith( " S " ) select n;

运行结果:

2010122910590575.jpg

03 排序操作符(OrderBy,OrderByDescending,ThenBy,ThenByDescending,Reverse)

(1)OrderBy/OrderByDescending操作符能将序列中的返回值按照升序/降序的顺序进行排列.

方法语法:

ContractedBlock.gif 代码

查询语法:

 
   
// 正序
var query = from n in names orderby n select n;

//倒

query = from n in names orderby n descending select n;

运行结果:

2010122911080056.jpg

(2)ThenBy/ThenByDescending操作符可按照次关键对序列进行升序/降序排列.

方法语法:

ContractedBlock.gif 代码

查询语法:

 
   
// 正序
var query = from u in users orderby u.Name, u.Age select u;

// 倒序
query = (from u in users orderby u.Name select u).ThenByDescending(u => u.Age);

运行结果:

2010122911251320.jpg

(3)Reverse操作符只是简单的把数据源中的数据按照相反的顺序返回.(需要注意的是:Reverse在LINQ To SQL中是不支持的).

ContractedBlock.gif 代码

运行结果:

2010122911304756.jpg

04 联接操作符(join,GroupJoin)

(1)join操作符类似于T-SQL中的inner join,它可以将一个数据源与另一个数据源想联接,根据两个数据源中相等的值进行匹配.

方法语法:

ContractedBlock.gif 代码

查询语法:

 
   
var query = from r in roles
join u
in users on r.Id equals u.RoleId
where r.Id == 1
select
new { RoleId = r.Id, RoleName = r.Name, UserName = u.Name };

运行结果:

2010122912440332.jpg

(2)GroupJoin操作符类似于T-SQL中的INNER JOIN, LEFT OUTER JOIN,返回的是一个层级的结果集

ContractedBlock.gif 代码

运行结果:

2010122913073750.jpg

05 分组操作符(GroupBy)

(1)GroupBy分组操作符是根据一个指定的特定值将序列中的值或元素进行分组.

ContractedBlock.gif 代码

运行结果:

2010122913224629.jpg

06 串联操作符(Concat)

(1)Concat操作符可以将两个对象联接在一起

ContractedBlock.gif 代码

运行结果:

2010122913304239.jpg

07 聚合操作符(Aggregate,Average,Count,LongCount,Max,Min,Sum)

(1)聚合函数是在序列上执行特定的运算后返回单个值.共有7个聚合查询操作符:
Aggregate:将序列中的值进行累积并返回结果.
    Average:计算一个数值序列的平均值.
    Count,LongCount:计算一个集合中元素的个数.但是前者返回的是Int32类型的值,后者为Int64
    Max,Min:分别是返回序列中的最大值和最小值
    Sum:返回集合中数值的总和

ContractedBlock.gif 代码

运行结果:

2010122913515575.jpg

08 集合操作符(Distinct,Union,Intersect,Except)

(1)Distinct操作符可以删除集合中重复的值,并返回该集合中不相同的元素.

ContractedBlock.gif 代码
运行结果:
2010122914195041.jpg

(2)Union操作符可以取两个集合的互不相同的所有数值.

ContractedBlock.gif 代码

运行结果:
2010122914483914.jpg

(3)Intersect操作符可以返回两个序列的交集.也就是返回同时存在于2个序列中的值.

ContractedBlock.gif 代码

运行结果:
2010122914504825.jpg

(4)Except操作符可以返回两个序列中不同的值.

ContractedBlock.gif 代码

运行结果:
2010122914531947.jpg

09 生成操作符(Empty,Range,Repeat)

(1)Empty操作符可以返回一个指定类型的空集,通常用来作为聚合操作符的种子值.

ContractedBlock.gif 代码

运行结果:
2010122916303879.jpg

(2)Range操作符可以创建一个连续数字序列的集合.

ContractedBlock.gif 代码

运行结果:
2010122916364080.jpg

(3)Repeat操作符可以创建一个单值序列,可自定义重复的次数.

ContractedBlock.gif 代码

运行结果:
2010122916394243.jpg

10 转换操作符(Cast,OfType,ToArray,ToList,ToLookup)

(1)Cast操作符将查询可以将IEnumerable中的元素转换为指定的类型.

ContractedBlock.gif 代码

运行结果:
2010122916521335.jpg

(2)OfType操作符可以对一个序列进行指定类型的过滤.

ContractedBlock.gif 代码

运行结果:
2010122916550082.jpg

(3)ToArray/ToList操作符可以分别可以将序列创建为一个数组或者List<T>对象.需要注意的是进行转换时会强制查询立即执行,也就意味着查询将于源数据断开联系.得到的序列为新创建的数组或List<T>.

ContractedBlock.gif 代码

运行结果:
2010122917070814.jpg

(4)ToDictionary/ToLookUp可以将序列分别转换为一对一的Dictionary<T Key,T Value>字典,或者一对多的LookUp<T Key,TElement Values>字典.

ContractedBlock.gif 代码

运行结果:
2010122920395353.jpg

11 元素操作符(DefaultIfEmpty,ElementAt,ElementAtOrDefault,First,Last,FirstOrDefault,LastOrDefault,Single,SingleOrDefault)

(1)DefaultIfEmpty操作符将一个空集合替换为包含默认值的集合.

ContractedBlock.gif 代码

运行结果:
2010122921010286.jpg

(2)ElementAt操作符返回集合中给定索引处的元素,如果索引超出范围则会抛出一个index out of range的错误,如果不能确定索引范围,应使用ElementAtOrDefault操作符,ElementAtOrDefault操作符会在索引超出范围时返回一个默认值.

ContractedBlock.gif 代码

运行结果:
2010122921105243.jpg

(3)First/Last操作符分别是返回集合中的第一个/最后一个元素,如果不确定是否有第一个或者最后一个值,可以使用FirstOrDefaule/LastOrDefault,它们分别会在First/Last操作符找不到元素的时候返回默认值.

ContractedBlock.gif 代码

运行结果:
2010122921162742.jpg

(4)Single操作符可以从一个序列中返回唯一满足某个特定条件的元素,如果找不到匹配的元素或者序列返回多个符合条件的元素,都会抛出异常.如果希望找不到元素时返回一个默认值,可以使用SingleOrDefault操作符.

ContractedBlock.gif 代码

运行结果:
2010122921233920.jpg

12 相等操作符(SequenceEqual)

(1)SequenceEqual操作符可以判定两个集合是否相等,返回值为Boolean值.

ContractedBlock.gif 代码

运行结果:
2010122921282444.jpg

13 量词操作符(All,Any)

(1)All操作符判断集合中所有元素是否满足特定的条件.如果均满足返回True,否则False.

ContractedBlock.gif 代码

运行结果:
2010122921361832.jpg

(2)Any操作符判断集合中是否至少有一个元素满足特定的条件.有则返回True,否则False.

ContractedBlock.gif 代码

运行结果:
2010122921361832.jpg

14 分割操作符(Skip,SkipWhile,Take,TakeWhile)

(1)Skip操作符会跳过指定数量的元素后返回余下的元素,SkipWhile操作符则会通过特定的条件跳过一些元素,然后返回余下的元素.

ContractedBlock.gif 代码

运行结果:
2010122921495896.jpg

(2)Take操作符会返回集合前面指定数量的元素,TakeWhile操作符则会通过特定的条件选取元素,如果某个元素不符合条件,则从该元素起的元素全部跳过.

ContractedBlock.gif 代码

运行结果:
2010122921545784.jpg

小结

标准查询操作符是LINQ查询表达式的构成模块,它们提供了许多查询功能,目前我正在自学这些内容,在此把自己的学习成果分享一下,仅提供给初学者作为参考用,如果有错误的地方请高手指出,我尽快改正~~

相关文章

1.LinQ初体验 简单的示例(原创)

2.Linq初体验 Linq2SQL示例(原创)

3.Linq推迟查询的执行(原创)

4.Ling初体验 匿名类型在查询表达式中的使用

5.Linq初级班 标准查询操作符的使用和调用

6.Linq初级班 Linq To XML体验(编程篇)

7.Linq初级班 Linq To XML体验(基础篇)

8.Linq初级班 Linq To XML体验(高级编程篇)




本文转自黄聪博客园博客,原文链接:http://www.cnblogs.com/huangcong/archive/2010/12/29/1919817.html,如需转载请自行联系原作者

相关文章
|
9月前
|
开发框架 .NET 编译器
C# Lambda表达式和linq表达式 之 匿名对象查询接收
C# Lambda表达式和linq表达式 之 匿名对象查询接收
|
存储 SQL 开发框架
Linq To Object标准操作符最强总结
Linq To Object标准操作符最强总结
112 0
|
.NET 开发框架
Orleans 支持Linq 表达式参数
Orleans 支持Linq 表达式参数
1031 0