- Rongsen.Com.Cn 版权所有 2008-2010 京ICP备08007000号 京公海网安备11010802026356号 朝阳网安编号:110105199号
- 北京黑客防线网安工作室-黑客防线网安服务器维护基地为您提供专业的
服务器维护
,企业网站维护
,网站维护
服务 - (建议采用1024×768分辨率,以达到最佳视觉效果) Powered by 黑客防线网安 ©2009-2010 www.rongsen.com.cn
作者:黑客防线网安SQL维护基地 来源:黑客防线网安SQL维护基地 浏览次数:0 |
选取
Select:使用给定的Lambda表达式转换每一个输入元素,对应SQL语法也是Select
SelectMany:转换输入元素, 然后连接各个结果子序列,对应SQL语法是INNER JOIN, LEFT OUTER JOIN, CORSS JOIN
对于LINQ to SQL查询, Select和SelectMany是最常用的连接构造方法, 而对于本地查询, Join和GroupJoin才是最有效的连接构造方法.
Select
参数列表:
源序列: IEnumerable
结果选择器: TSource => TResult或者(TSource,int) => TResult(LINQ to SQL不支持)
使用Select,你总是得到开始操作前相同的元素数量, 然而每一个元素是可以被任何数量的Lambda函数转换的.
以下的操作列出了电脑中安装的所有字体名称(来自于System.Drawing)
1: IEnumerable<string> query = 2: 3: from f in FontFamily.Families 4: 5: select f.Name; 6: 7: foreach (string name in query) Console.WriteLine (name);
在这个例子当中,select从句将一个FontFamily对象转换为它的名称.以下给出了一个相应的Lamdba表达式:
1: IEnumerable<string> query = 2: 3: FontFamily.Families.Select (f => f.Name);
Select语句经常与匿名类型一起使用:
1: var query = 2: from f in FontFamily.Families 3: select new 4: { 5: f.Name, 6: LineSpacing = f.GetLineSpacing (FontStyle.Bold) 7: };
有时,一个不含任何转换的选取会用于一个复合查询,并以select或者group语句作为结尾. 以下查询选择的字体都支持strikeout:
1: IEnumerable query = 2: 3: from f in FontFamily.Families 4: 5: where f.IsStyleAvailable (FontStyle.Strikeout) 6: 7: select f; 8: 9: 10: 11: foreach (FontFamily ff in query) 12: 13: Console.WriteLine (ff.Name);
索引选取
选择表达式可以接受一个可选的整数参数,这个参数指示输入序列中的每个元素的索引位置.以下例子只能在本地查询中工作:
1: string[] names = { “James”,“Derek”,“Harry”,“Mary”,“Jack” }; 2: 3: IEnumerable<string> query = names 4: 5: .Select ((s,i) => i + “=” + s); 6: 7: foreach(var s in query) 8: 9: Console.WriteLine(s); //0=James, 1=Derek…
子查询与对象层级
你可以通过在select语句中嵌套一个子查询来创建一个对象层级.以下示例返回C:\LINQ下的所有目录, 并且每个元素都拥有一个包含各自目录文件的子集合:
1: DirectoryInfo[] dirs = 2: 3: new DirectoryInfo (@”C:\LINQ”).GetDirectories( ); 4: 5: var query = 6: 7: from d in dirs 8: 9: where (d.Attributes & FileAttributes.System) == 0 10: 11: select new 12: 13: { 14: 15: DirectoryName = d.FullName, 16: 17: Created = d.CreationTime, 18: 19: Files = 20: 21: from f in d.GetFiles( ) 22: 23: where (f.Attributes & FileAttributes.Hidden) == 0 24: 25: select new { FileName = f.Name, f.Length, } 26: 27: };
此查询里面部分可以被称为相关子查询.当一个子查询引用了外部查询的对象我们可以称它们是相关的-在这个例子中,它引用了d,代表了被枚举的目录.
如果是本地查询, 一个select里面的子查询会引起双延迟执行. 在我们的例子中,目录下的文件不会被选取直到内部foreach表达式被枚举执行.
我要申请本站:N点 | 黑客防线官网 | |
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479 |