- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linq基础知识
标准查询操作符
LINQ支持大量的查询操作符——可用于选择、排序或筛选从查询返回的数据的关键字。尽管本章所有示例是在LINQ to SQL的背景下讨论的,但也可将它们应用到其他LINQ实现中。接下来,将通过示例概述一些最为重要的标准查询操作符。每个示例都使用对象模型和之前创建的名为myDataContext的DataContext对象作为查询的数据源。
1. Select
Select关键字(C#中是select)用于从查询的源中检索对象。在这个示例中,可看到如何选择已有类型的一个对象。在本章后面,将看到如何动态定义新的对象类型。
C#
var allReviews = from r in myDataContext.Reviews
select r;
这一示例中的变量指范围变量(range variable),它只在当前查询中可用。通常在From子句中引入范围变量,然后在Where和Select子句再次使用它来筛选数据,表明要选择的数据。尽管对于它可采用任意的名称,通常看到的是单个字母的变量,如r(表示Review)或所查询集合的单数形式(在前面的示例中是review而不是 r)。
2. From
尽管From子句(C#中是from)不能算是标准查询运算符,因为它并不对数据进行操作而是指向数据,但它是LINQ查询中的一个重要元素,因为它定义了查询所执行的集合或数据源。在前面的例子中,From子句表明查询必须对myDataContext对象所提供的Reviews集合进行执行。
3. Order By
运用Order By(C#中的orderby),可以对结果集合中的项进行排序。Order By后面紧跟着的是可选的用来指定排序顺序的Ascending或Descending关键字(C#中是ascending或descending)。可以通过逗号分隔来指定多个条件。下列查询返回一个流派列表,首先按SortOrder列以降序排列,然后按Name列以升序排列。
C#
var allGenres = from g in myDataContext.Genres
orderby g.SortOrder descending, g.Name
select g;
4. Where
和SQL中的WHERE子句一样,LINQ中的Where子句(C#中的where)允许筛选查询返回的对象。下列查询返回所有授权的评论:
C#
var allReviews = from r in myDataContext.Reviews
?? where r.Authorized == true
??????????????????? select r;
注意,Where子句使用了语言的标准等号运算符:VB.NET中的“=”,以及C#中的“= =”。
5. Sum、Min、Max、Average和Count
这些聚集运算符允许在结果集中的对象上进行数学计算。例如,要检索所有流派的平均SortOrder,可执行下列查询:
C#
var average = (from g in myDataContext.Genres
select g.SortOrder).Average();
注意, Average方法被运用于整个结果集。因此,需要将整个语句括到括号中,然后再调用Average方法。没有括号的话,就会出错。这个示例中的 average变量将被推断为Double型,包含Genre表中所有SortOrder值的平均值。此方法在真正应用程序中并不是很有用,但在这里作为 Average方法的一个示例还是很适合的。
类似地,可检索评论数,如下所示:
C#
var numberOfReviews = (from r in myDataContext.Reviews
select r).Count();
6. Take、Skip、TakeWhile和SkipWhile
Take和Skip允许在结果集中作子选择。这很适用于分页情况,其中只检索当前页面的记录。Take从结果集中获取请求的元素,然后忽略其余的;而Skip与它相反,忽略请求的元素,然后返回其余的。
在LINQ to SQL中,Take和Skip操作符也被转换为SQL语句。这意味着分页是在数据库级发生的,而不是在ASP.NET页面中。这大大增强了查询的性能,特别是对于一些较大的结果集,不是所有的元素都必须从数据库转移到ASP.NET页面。
下面的例子显示了如何检索第二页的记录,假定页面大小为10。
C#
var allReviews = (from r in myDataContext.Reviews
select r).Skip(10).Take(10);
和Average一样,查询被括在一对括号中,然后调用Skip和Ta
文档评论(0)