程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> LINQ學習筆記:選取Select

LINQ學習筆記:選取Select

編輯:關於SqlServer


   選取

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表達式被枚舉執行.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved