• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第二章 部分内容 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文介绍了一些复杂的Linq语句的转换写法。

表 2-1. 转换步骤变量

变量 说明 例子
c 编译器生成的临时变量 N/A
e 一个枚举变量 from e in customers
f 查询字段项或者一个匿名类型 from e in customers select f
g 一个分组项 from e in s group g by k
i 一个假设序列 from e in s into i
k Group或者Join关键字项 from e in s group g by k
l 通过Let引入一个变量 from e in s let l = v
o 一个排序项 from e in s orderby o
s 输入的序列 from e in s
v 一个赋值给Let的值 from e in s let l = v
w 一个where子句 from e in s where w

扩展子句里使用Select和Group子句

如果你的查询表达式包含一个扩展子句,进行以下转换:

这里有个例子:

使用后面的转换步骤这最终会转换为:

显示枚举变量类型

如果你的查询表达式包含一个显示指定枚举变量类型的子句,进行以下转换:

 

使用后面的转换步骤这最终会转换为:

如果你的查询表达式包含一个联合子句,该子句显示指定一个枚举变量类型,进行如下转换:

这里有一个例子:

使用后面的转换步骤这最终会转换为:

提示:当枚举数据集合是C# 旧数据集合其中之一,显示类型枚举变量是必须的,如ArrayList。转换完成时,显示类型枚举变量将旧集合转换成一个实现IEnumerable<T>序列,以便其他查询操作可以执行的序列。

联合子句

如果查询表达式包含一个from子句,一个join子句,没有into延续子句,跟一个Select子句,进行如下转换:

这里有一个例子:

使用后面的转换步骤这最终会转换为:

如果查询表达式包含一个from子句,一个join子句,一个into延续子句,一个select子句,进行如下转换:

这里有一个例子:

使用后面的转换步骤这最终会转换为:

如果一个查询表达式包含一个from子句,一个join子句,没有into延续子句,一个其他任意的select子句,进行如下转换:

注意:现在,有一种代码模式在此转换步骤中匹配第一个代码模式。明确的说,你必须有一个查询表达式包含一个from子句,一个join子句,没有into延续子句,一个select子句。所以编译器将重复此转换步骤。如果一个查询表达式包含一个from子句,一个join子句,into延续子句,一个其他任意的select子句,进行如下转换:

Let和Where子句

如果查询表达式包含一个from子句,立即跟一个Let子句,进行如下转换:

这里是一个例子:

使用后面的转换步骤这最终会转换为:

如果查询表达式包含一个from子句,立即跟一个Where子句,进行如下转换:

这里有个一个例子:

使用后面的转换步骤这最终会转换为:

多个生成器(From)子句

如果查询表达式包含两个from子句,一个select子句,进行如下转换:

这里是一个例子:

使用后面的转换步骤这最终会转换为:

如果查询表达式包含两个from子句,跟一个其他任意select子句,进行如下转换:

这里有一个例子:

使用后面的转换步骤这最终会转换为:

Orderby子句

如果是升序的排序方向,进行如下转换:

这里有一个例子:

使用后面的转换步骤这最终会转换为:

如果任意一个字段为降序排序,转换成OrderByDescending或者ThenByDescending操作。这里的例子和上一个差不多,除了将名称修改成倒序排序:

使用后面的转换步骤这最终会转换为:

 

Select子句

在查询表达式中,如果select项是和序列枚举变量相同的标示符,意思是你要select序列中存储的所有项,进行如下转换:

这里有一个例子:

如果select项是和序列枚举变量标示符不相同,意思是你要 select  除了序列中存储的全部项以外的其他项 (例如一个成员项或者一个匿名变量类型)来构造若干个成员项,进行如下转换:

这里有一个例子:

Group子句

在查询表达式中,如果group项与序列枚举标示符相同,意思是你group整个序列中存储的某一项,进行如下转换:

这里有一个例子:

如果group项不同于序列枚举的标示符,意思是你group整个序列中存储的某些项,并将这些项存储在一个序列中,进行如下转换:

 

这里有一个例子:

 

这里的所有转换步骤都是完成,查询表达式完全转换成标准“.”表示法语法。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
c#中const与readonly区别发布时间:2022-07-10
下一篇:
C#泛型委托与Lambda总结发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap