c#中LINQ的基本使用方法是什么


今天小编给大家分享一下c#中LINQ的基本使用方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。LINQ查询使用where子句添加条件表达式来筛选,where子句可以合并多个表达式。上述LINQ表达式映射为C# LINQ查询的扩展方法:注意,并不是所以查询都可以使用LINQ查询语法,也不是所有的扩展方法都映射到LINQ查询。高级查询需要使用扩展方法。不能使用LINQ查询的一个例子是Where()方法的重载。在WHere()方法的重载中,可以传递第二个参数————索引。索引是筛选器返回的每个结果的计数器。可以在表达式中使用这个索引,执行基于索引的计算:为了进行基于类型的筛选,可以使用OfType()扩展方法。输出:从集合仅返回字符串。如果需要根据对象的成员进行筛选,而该成员本身是一个系列,就可以使用复合from子句。例如,LINQ基础(一)(https://www.byun.com/article/244208.htm)中的Racer类定义了一个属性Cars,Cars是一个字符串数组。
筛选驾驶Ferrari的所以冠军:第一个from子句访问Formula1.GetChampions()方法返回的Racer对象,第二个from子句访问Racer类的Cars属性,以返回所以sting类型的赛车。
C#编译器把复合的from子句和LINQ查询转换为SelectMany()扩展方法。SelectMany()扩展方法可以迭代序列中的序列。
SelectMany()的重载版本:第一个参数是隐式参数,它从Formula1.GetChampions()方法接受Racer对象序列。第二个参数是collectionSelector委托,其中定义了内部序列,是序列的序列,本例子为Cars。第三个参数也是一个委托,为每个Racer对象的Cars属性的每个元素调用这个委托。
这里Cars是一个字符串数组,会将每个Racer和每个字符串作为参数,调用这个委托。要对序列排序,可以使用前面使用过的orderby.也可以使用orderrby descending子句(降序)。orderby子句解析为OrderBy()方法,orderby r.Country descending解析为OrderByDescending()方法:OrderBy()和OrderByDescending()方法返回IOrderEnumerable。这个接口派生自IEnumerable接口,但包含一个额外的方法CreateOrderEnumerable()方法。这个方法用于进一步给序列排序,可以在最后一个参数指定升序还是降序:例子:使用ThenBy和ThenByDescending()方法进行进一步排序,可以添加任意多个:要根据一个关键字值对查询结果分组,可以使用group子句。输出:使用扩展方法执行相同的操作,把group r by r.Country 子句解析为GroupBy()方法。在GroupBy()方法的声明中,它返回实现了IGrouping接口的枚举对象。IGrouping接口定义了Key属性,所以在调用了这个方法后,可以访问分组的关键字:使用GroupBy方法:如果得到的分组的对象需要包含嵌套的序列,就可以改变select子句创建匿名类型。使用join子句可以根据特定的条件合并两个数据源,但之前要获得两个连接的列表。
使用了LINQ基础(一)(https://www.byun.com/article/244208.htm)的代码使用内连接返回匹配r.Year equals t.Year的结果。左连接返回左边数据源的全部元素,即使在右边的数据源中没有匹配的元素。组连接类似内连接,内连接通过某一项连接两个数据源(如 r.Year equa免费云主机域名ls t.Year),组连接使用一组项连接,例如下面的例子,
通过连接两个数据源扩展方法Distinct(),Union(),Intersect()(获取交集),Except()都是集合操作。Zip()方法是.NET 4.0新增的,允许用一个为此函数把两个相关的序列合并为一个。
对于合并,第一个集合中的第一项与第二个集合的第一项合并,第一个集合中的第二项与第二个集合的第二项合并,以此类推。如果两个序列的项数不同,Zip()方法就会在达到较小集合的末尾时停止。
第一个集合中的元素有一个Name属性,第二个集合中的元素有LastName和Starts属性。
在racerNames集合上使用Zip()方法,需要把第二个集合racerNamesAndStarts作为第一个参数。第二个参数是一个委托,它通过参数first接受第一个集合的元素,通过参数second接受第二个集合的元素。其实现代码返回一个字符串:扩展方法Take()和Skip()等的分区操作可用于分页。
例如,在第一页只显示5个赛车手,下一页显示接下来的5个赛车手…
Skip(page * pageSize)方法调到指定索引出,忽略前面的数据。Take(pageSize)方法显示pageSize条数据TakeWhile()和SkipWhile()方法,传递一个委托,满足这个条件的数据就提取或跳转:聚合操作符(如Count(),Sum(),Min(),Max(),Average(),Aggregate())不返回一个序列,而是返回一个值。
例如,使用Count方法应用于Racer的Years属性,筛选获得冠军次数超过3次的赛车手。因为多次使用r.Years.Count(),所以使用let子句定义了一个变量。Aggregate()方法传递一个委托,将数据源中的每个元素作为委托的参数,并使用指定的函数累加。LINQ基础(一)(https://www.byun.com/article/244208.htm)提到,查询会推迟到迭代数据项时才执行,使用转换操作符会立即执行查询,把查询结果放在数组,列表和字典中。转换为LookupToLookup(cr => cr.Car, cr => cr.Racer)方法的一个重载版本传递一个键和一个元素选择器
如果需要在非类型化的集合上使用LINQ查询,可以使用Cast()方法,定义强类型化的查询:Cast()将 System.Collections.IEnumerable 的元素强制转换为指定的类型。生成操作符Range(),Empty(),Repeat()方法不是扩展方法,而是返回序列的正常静态方法。在LING to Object中,这些方法可用于Enumerable类。
Range()方法用来填充一个范围的数字。第一个参数作为起始值,第二个参数作为要填充的项数:结果为1至20的集合。可以把该结果与其它扩展方法合并:Empty()方法返回一个不返回值的迭代器,它用于需要一个集合的参数,其中可以给参数传递空集合。
Repeat()方法返回指定个数的重复值的集合迭代器。以上就是“c#中LINQ的基本使用方法是什么”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注百云主机行业资讯频道。

相关推荐: Golang中Context的常见应用场景有哪些

这篇文章主要讲解了“Golang中Context的常见应用场景有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和免费云主机域名学习“Golang中Context的常见应用场景有哪些”吧!假设我们希望HTTP请求在给…

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

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 04/16 17:15
下一篇 04/16 17:27

相关推荐