LINQ 方法


過濾操作符

Where

       運算符(Linq擴展方法)根據給定條件過濾集合

其中擴展方法有以下兩個重載。一個過載需要Func <TSource,bool>輸入參數和第二個重載方法需要Func <TSource,int,bool>輸入參數其中int是索引:

查詢語法中的Where子句:

     

在上面的示例查詢中,lambda表達式主體s.Age > 12 && s.Age < 20作為謂詞函數傳遞,用於評估集合中的每個學生。Func<TSource, bool>

也可以使用帶有匿名方法的Func類型委托作為謂詞函數進行傳遞

 

方法中的擴展方法語法:

 與查詢語法不同,您需要傳遞整個lambda表達式作為謂詞函數。

 

 Where擴展方法也有第二個重載,包括集合中當前元素的索引如果需要,您可以在邏輯中使用該索引。

多個Where子句:

   

OfType

使用OfType運算符根據每個元素的類型過濾上述集合

 

排序運算符

   Orderby

     OrderBy按升序或降序對集合的值進行排序默認情況下,按升序排列集合,因為ascending關鍵字在這里是可選的。

  

 

多重排序:

您可以在由逗號分隔的多個字段上對集合進行排序。給定的集合將首先基於第一個字段進行排序,然后如果第一個字段的值對於兩個元素是相同的,那么它將使用第二個字段進行排序等等。

 

注:方法語法中的多重排序工作方式不同。使用ThenBy或ThenByDecending擴展方法進行二級排序。

  1. LINQ包含五個排序算子:OrderByOrderByDescendingThenByThenByDescendingReverse
  2. LINQ查詢語法不支持OrderByDescending,ThenBy,ThenByDescending和Reverse。它只支持“升序”和“降序”排序方向的“排序”條款。
  3. LINQ查詢語法支持用逗號分隔的多個排序字段,而您必須使用ThenBy&ThenByDescending方法進行二級排序。

ThenBy&ThenByDescending

     

 

分組操作

    Groupby 

   該組包含在實現了一個IGrouping <TKey,TSource>接口的特殊類型的集合中,其中TKey是一個鍵值,組中已經形成了該組,而TSource是與分組鍵值匹配的元素的集合

 

LINQ查詢可以以GroupBy或Select子句結束。  item.Key=by 后面接的數據

 

 

ToLookup

ToLookup與GroupBy相同; 唯一的區別是GroupBy執行延遲,而ToLookup執行是立即的另外,ToLookup僅適用於Method語法查詢語法不支持ToLookup。

要記住的要點:

  1. GroupBy&ToLookup返回一個集合,該集合具有一個鍵和一個基於鍵值字段值的內部集合
  2. GroupBy的執行被推遲,而ToLookup的執行是立即的。
  3. LINQ查詢語法可以以GroupBy或Select子句結束。

 

加入

 加入運算符加入兩個序列(集合)並產生結果。

join:

Join操作符運行於兩個集合,即內部集合和外部集合返回一個新的集合,其中包含來自滿足指定表達式的集合的元素。與SQL的內部連接相同

 

 

 

例如:

 

 Join方法中的第一個參數用於指定內部序列,即standardListJoin方法的第二個和第三個參數用於指定一個字段,其值應該使用lambda表達式進行匹配,以便在結果中包含元素。外部序列的關鍵選擇器student => student.StandardID指示:將studentList的每個元素的StandardID字段與內部序列的關鍵字匹配standard => standard.StandardID如果兩個鍵字段的值匹配,則將該元素包含在結果中。

 

加入查詢語法:

查詢語法中的連接運算符與方法語法略有不同。它需要外部序列,內部序列,密鑰選擇器和結果選擇器。'on'關鍵字用於關鍵選擇器,其中'equals'運算符的左側outerKeySelector,'equals'的右側innerKeySelector

要記住的要點:

    1. Join 就像SQL的內部連接一樣。它返回一個新的集合,其中包含兩個集合中的通用元素,這兩個集合的密鑰匹
    2. 連接操作兩個序列的內部序列和外部序列,並產生一個結果序列。
    3. 加入查詢語法: 
      from... in outerSequence
      join... in innerSequence 
      on outerKey equals innerKey
      select ...

 

GroupJoin

    

方法查詢:

 

 

 查詢語法:

 

 

投影運算符:Select,SelectMany

  select

       返回一個包含基於轉換函數的元素的IEnumerable集合。它類似於生成平坦結果集的SQL的Select子句。

LINQ查詢語法必須以SelectGroupBy子句結束。以下示例演示select運算符,該運算符返回StudentName的字符串集合。

   

SelectMany:

SelectMany運算符投影基於轉換函數的值序列,然后將它們平鋪為一個序列。

 

量詞運算符

    All

   All運算符在指定的條件下評估給定集合中的每個元素,如果所有元素滿足條件,則返回True

   Any

   查元素是否滿足給定的條件,如果有一個滿足就返回真。

  

  Contains

   檢查集合中是否存在指定的元素,並返回布爾值。

即使studentList中存在“Bill”,Contains也會返回false。這是因為Contains擴展方法只比較對象的引用,而不是對象的實際值。因此,要比較學生對象的值,您需要通過實現IEqualityComparer接口創建一個類,該接口比較兩個Student對象的值並返回布爾值。

 

 

 

聚合運算符

    Aggregate

   執行累積操作。這個跟JavaScript里面的reduce函數一樣。

 

 

         

 

    Average

      平均擴展方法計算集合中數值項的平均值。平均方法返回可為空或不可空的十進制,雙精度或浮點值。

 

  Count

    Count運算符返回集合中元素的數量或滿足給定條件的元素數量。

 

 

Max

 Max運算符返回集合中最大的數字元素。

 

Sum

 計算集合中數字項目的總和。

 

元素操作符 :從一個序列(集合)中返回一個特定的元素

   ElementAt & ElementAtOrDefault

     ElementAt法返回給定集合中指定索引的元素。如果指定的索引超出集合的范圍,則會拋出索引超出范圍的

     ElementAtOrDefault: 如果指定的索引超出了集合的范圍,那么它將返回數據類型的默認值而不是拋出錯誤。

 

 

 First & FirstOrDefault

   返回集合中第零個索引的元素,即第一個元素。此外,它返回一個滿足指定條件的元素

 

 Last & LastOrDefault

      返回集合中的最后一個元素.跟First&FirstOrDefault剛好是相反的。

 

Single & SingleOrDefault 

  返回集合中唯一的元素,如果找不到元素或存在多個元素都會報錯。

 SingleOrDefault如果集合為空,或者找不到指定條件的元素,它將返回集合的數據類型的默認值。

  1. Single()期望集合中只有一個元素
  2. Single()在集合中沒有元素或多個元素時拋出異常
  3. 如果在Single()中指定了一個條件,並且結果不包含任何元素或多個元素,則會引發異常。
  4. SingleOrDefault()將返回一個泛型集合的數據類型的默認值,如果聚集中沒有元素或指定的條件。
  5. 如果聚集中有多個元素或指定的條件,SingleOrDefault()將會拋出一個異常。

 

平等運算符

SequenceEqual

SequenceEqual方法檢查元素的數量,每個元素的值和兩個集合中元素的順序是否相等。

 

 

 

Concat

       附加兩個相同類型的序列並返回一個新的序列(集合)。

    

   

 

生成操作符 LINQ包含了生成運算符DefaultIfEmpty,Empty,Range&Repeat。Empty,Range和Repeat方法不是IEnumerable或IQueryable的擴展方法,但它們只是靜態類Enumerable中定義的靜態方法。

   DefaultIfEmpty

如果調用DefaultIfEmpty()的給定集合為空,則DefaultIfEmpty()方法將返回具有默認值的新集合。

DefaultIfEmpty()的另一個重載方法需要一個應該被默認值替換的值參數。

     

 

  Empty

      返回一個空的集合。

Empty()方法不像其他LINQ方法那樣是IEnumerable或IQueryable的擴展方法。這是Enumerable靜態類中包含的靜態方法所以,你可以像Enumerable.Empty <TResult>()這樣的其他靜態方法調用它。Empty()方法返回一個指定類型的空集合

 

 Range

   從第一個元素開始返回一個IEnumerable <T>類型的集合,其中包含指定數量的元素和順序值。

 

 

Repeat

 生成一個具有指定數量元素的IEnumerable <T>類型的集合,每個元素包含相同的指定值。

   

 

 

設置運算符   

Distinct

     不同的擴展方法返回給定集合中唯一元素的新集合。

  

 

 

  

 

 

 Except

     需要兩個集合。它返回一個新集合,其中第一個集合中的元素不存在於第二個集合(參數集合)中。

     

復雜的類型跟上門一樣。

 

Intersect

   需要兩個集合。它返回一個新的集合,其中包含集合中存在的公共元素。

       

 

Union

 需要兩個集合,並返回一個新集合,其中包含兩個集合中不同的元素。

    

 

 

分區操作符

  Skip & SkipWhile 

    從第一個元素開始跳過指定數量的元素,並返回其余元素.

  

 LINQ中的SkipWhile()擴展方法跳過集合中的元素,直到指定的條件為真它返回一個新的集合,包含所有剩余的元素,一旦指定的條件為任何元素為false。

     

       

 

 Take & TakeWhile

     返回從第一個元素開始的指定數量的元素。

   

TakeWhile()擴展方法返回給定集合中的元素,直到指定的條件為真。如果第一個元素本身不滿足條件,則返回一個空集合。

   

 在上面的例子中,TakeWhile()只包含第一個元素,因為第二個字符串元素不滿足條件。

 

注:把Skip和Take聯合起來就可以形成分頁。

 

 轉換運算符

AsEnumerable & AsQueryable

 AsEnumerable和AsQueryable方法將源對象強制轉換或分別轉換為IEnumerable <T>或IQueryable <T>。

        

 CastAsEnumerable <T>完全相同。它將源對象轉換為IEnumerable <T>。

 

ToArray:ToArray(),ToList(),ToDictionary():

      ToArray(),ToList(),ToDictionary()方法分別將源對象轉換為數組,List或Dictionary。

 

    

 

 附加:

Let 關鍵字

“let”關鍵字在查詢語法中很有用。它會投影一個新的范圍變量,允許重新使用表達式並使查詢更具可讀性。

例如: 這里需要寫,兩遍   let可以看成在查詢語法里面申明一個變量。

 

 

Into  關鍵字    

分組里面也可以使用Into關鍵字

  

 

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM