快速业务通道

LINQ学习笔记:选取Select

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-04-10

选取

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:          };

 

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号