C#如何使用LINQ查询操作符


这篇文章主要讲解了“C#如何使用LINQ查询操作符”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#如何使用LINQ查询操作符”吧!1、使用 join 子句 根据特定的条件合并两个数据源,但之前要获得两个要连接的列表。业务说明:返回1958到1965年间的车手冠军和车队冠军信息,根据年份关联方法语法:结果:Year Champion Constructor Title
1958: Mike Hawthorn Vanwall
1959: Jack Brabham Cooper
1960: Jack Brabham Cooper
1961: Phil Hill Ferrari
1962: Graham Hill BRM
1963: Jim Clark Lotus
1964: John Surtees Ferrari
1965: Jim Clark Lotus
1966: Jack Brabham Brabham
1967: Denny Hulme Brabham2、或者合并成一个LINQ 查询方法语法左外连接返回左边序列中的全部元素,即使它们在右边的序列中并没有匹配的元素。左外连接用join子句和DefaultIfEmpty方法定义。 使用 DefaultIfEmpty 定义其右侧的默认值linq只支持左连接,如要右连接,将query和query1调换位置业务说明:如赛车手比车队设立冠军的年份要早,可能某个年份只有赛车手冠军没有车队冠军,这时候需要左连接查询。结果1950: Nino Farina no constructor championship
1951: Juan Manuel Fangio no constructor championship
1952: Alberto Ascari no constructor championship
1953: Alberto Ascari no constructor championship
1954: Juan Manuel Fangio no constructor championship
1955: Juan Manuel Fangio no constructor championship
1956: Juan Manuel Fangio no constructor championship
1957: Juan Manuel Fangio no constructor championship
1958: Mike Hawthorn Vanwall
1959: Jack Brabham Cooper左外连接使用了组连接和 into 子句。它有一部分与组连接相同,只不过组连接不适用 DefaultIfEmpty 方法。使用组连接时,基于键相等对两个两个独立的序列的元素进行关联并对结果进行分组。常应用于返回“主键对象-外键对象集合”形式的查询。业务说明:返回1958到1965年间的车手冠军和车队冠军信息,根据年份关联并分组注意:直接出现在join子句之后的into关键字会被翻译为GroupJoin,而在select或group子句之后的into表示继续一个查询。方法语法:结果:1950: Nino Farina 0
1952: Alberto Ascari 0
1953: Alberto Ascari 0
1951: Juan Manuel Fangio 0
1954: Juan Manuel Fangio 0
1955: Juan Manuel Fangio 0
1956: Juan Manuel Fangio 0
1957: Juan Manuel Fangio 0
1958: Mike Hawthorn 1
1961: Phil Hill 12、join…on…equals…支持多个键关联,可以使用匿名类型来对多个键值进行Join,如下所示:集合操作通过调用实体类的 GetHashCode() 和 Equals() 方法比较对象。 对于自定义比较,可以传递实现 IEqualityComparer接口的对象。业务说明:获取使用车型”Ferrari”和车型”Mclaren”都获得过车手冠军车手列表结果:Niki Lauda1)Union:并集,返回两个序列的并集,去掉重复元素。2)Concat:连接,返回两个序列的并集。3)Intersect:交集,返回两个序列中都有的元素,即交集。4)Except:差集,返回只出现在一个序列中的元素,即差集。示例:合并html开始标签和结束标签结果:A1
B2
C35) Zip:通过使用指定的委托函数合并两个序列,集合的总个数不变。示例:6) SequenceEqual:判断两个序列是否相等,需要内容及顺序都相等。扩展方法 Take() 和 Skip() 等的分区操作可以用于分页。添加在查询的“最后”,返回集合的一个子集。从序列的开头返回指定数量的连续元素。只要满足指定的条件,就会返回序列的元素。从第一个元素开始, 读取Starts小于40的人员列表,只要遇到大于40的元素就立即停止返回。结果:Alberto Ascari, Italy; starts: 32, wins: 10
Nino Farina, Italy; starts: 33, wins: 5跳过序列中指定数量的元素,然后返回剩余的元素。业务说明:将车手冠军列表按每页5个名字进行分页。结果:Page 0
Fernando Alonso
Mario Andretti
Alberto Ascari
Jack Brabham
Jim Clark
Page 1
Juan Manuel Fangio
Nino Farina
Emerson Fittipaldi
Mika Hakkinen
Mike Hawthorn只要满足指定的条件,就跳过序列中的元素,然后返回剩余元素。聚合操作符返回一个值。业务说明:下面的Count 方法只返回获得冠军次数超过三次的赛车手,因为同一个查询中需要使用同一个计数超过一次,所以使用let 子句定义了一个变量numberYear.业务说明:下面的Sum 方法用于计算一个国家赢得比赛的总次数。首先根据国家对赛车手分组,再在新创建的匿名类型中,把Wins 属性赋予某个国家赢得比赛的总次数。业务说明:Aggregate的
第一个参数是算法的种子,即初始值。(可选)
第二个参数是一个表达式,用来对每个元素进行计算(委托第一个参数是累加变量,第二个参数当前项)。
第三个参数是一个表达式,用来对最终结果进行数据转换。查询可以推迟到访问数据项时再执行。在迭代中使用查询时,查询会执行。而使用转换操作符会立即执行查询,把查询结果放在数组、列表或字典中。LINQ本身支持四种不同的集合生成方式,包含生成数组的ToArray()、生成列表的ToList、生成字典集合的ToDictionary以及生成Lookup类的ToLookup。将非泛型的 IEnumerable 集合元素转换为指定的泛型类型,若类型转换失败则抛出异常。
如果需要在非类型化的集合上(如ArrayList)使用LINQ 查询,就可以使用Cast 方法。在下面的例子中,基于Object类型的ArrayList集合用Racer对象填充。从 IEnumerable创建一个数组。立即执行查询,从 IEnumerable创建一个 List。根据指定的键选择器函数,从 IEnumerable创建一个 Dictionary将列表转换为字典:根据指定的键选择器函数,从 IEnumerable创建一个 System.Linq.Lookup。
ToLookup使用比较复杂,Lookup类似于Dictionary,不过,Dictionary每个键只对应一个值,而Lookup则是1:n 的映射。
Lookup没有公共构造函数,而且是不可变的。在创建Lookup之后,不能添加或删除其中的元素或键。(可以将ToLookup 视为GroupBy与ToDictionary的功能合体)
业务说明:将车手冠军按其使用车型进行分组,并显示使用”williams”车型的车手名字。返回指定序列的元素;如果序列为空,则返回包含类型参数的默认值的单一元素集合 。返回类型为 IEnumerable。用于处理LINQ to Entities操作远程数据源与本地集合的协作生成操作符返回一个新的集合。三个生成操作符不是扩展方法,而是返回序列的正常静态方法。生成一个具有指定类型参数的空序列 IEnumerable。
Empty() 方法返回一个不返回值的迭代器,用于需要一个集合的参数,可以给参数传递空集合。生成指定范围内的整数的序列 IEnumerable。
如需要填充一二范围的数字,此时就应使用 Range() 方法。这个方法第一个参数作为起始值,把第二个参数作为要填充的项数。Range() 方法不返回填充所定义值的集合,与其他方法一样,推迟查询,返回一个 RangeEnumerator。其中用 yield return 语句,来递增值。该免费云主机域名结果也可以与其他扩展方法一起用。生成包含一个重复值的序列 IEnumerable。
Repeat() 方法 返回一个迭代器,把同一个值重复特定的次数。如果元素序列满足指定的条件,量词操作符就返回布尔值。确定序列是否包含任何元素;或确定序列中的任何元素是否都满足条件。确定序列中的所有元素是否满足条件。确定序列是否包含指定的元素。这些元素操作符仅返回一个元素,不是IEnumerable。(默认值:值类型默认为0,引用类型默认为null)业务说明:获取冠军数排名第三的车手冠军1) First:返回序列中的第一个元素;如果是空序列,此方法将引发异常。2) FirstOrDefault:返回序列中的第一个元素;如果是空序列,则返回默认值default(TSource)。3) Last:返回序列的最后一个元素;如果是空序列,此方法将引发异常。4) LastOrDefault:返回序列中的最后一个元素;如果是空序列,则返回默认值default(TSource)。5) Single:返回序列的唯一元素;如果是空序列或序列包含多个元素,此方法将引发异常。6) SingleOrDefault:返回序列中的唯一元素;如果是空序列,则返回默认值default(TSource);如果该序列包含多个元素,此方法将引发异常。7) ElementAt:返回序列中指定索引处的元素,索引从0开始;如果索引超出范围,此方法将引发异常。8) ElementAtOrDefault:返回序列中指定索引处的元素,索引从0开始;如果索引超出范围,则返回默认值default(TSource)。AsParallel() 方法,扩展 IEnumerable接口,返回 ParallelQuery类,所以正常的集合类可以以平行方式查询。AsParallel()方法不仅扩展了 IEnumerable接口,还扩展了 Partitioner 类。通过它,可以影响创建的分区。手动创建一个分区器.NET 提供一个标准方法,来取消长时间运行的任务,也适用于并行Linq。要取消长时间运行的查询可以给查询添加WithCancellation() 方法,并传递一个 CancellactionToken令牌作为参数。CancelllationToken令牌从CancellactionTokenSource类中创建。该查询在单独的线程中运行,在该线程中,捕获一个OperationCanceledException类型的异常。如果取消了查询就触发这个异常。在主线程中,调用CancellationTokenSource类的Cancel()方法可以取消任务。感谢各位的阅读,以上就是“C#如何使用LINQ查询操作符”的内容了,经过本文的学习后,相信大家对C#如何使用LINQ查询操作符这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是百云主机,小编将为大家推送更多相关知识点的文章,欢迎关注!

相关推荐: Vue和React组件间如何实现传值

这篇文章主要讲解了“Vue和React组件间如何实现传值”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue和React组件间如何实现传值”吧!组件间的传值方式组件的传值场景无外乎以下几种:父子之间兄弟之间多层…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 03/12 17:51
Next 03/12 17:52

相关推荐