1. 程式人生 > >【Linq】標準查詢操作符

【Linq】標準查詢操作符

基本思想 cti 值轉換 clas 兩個 數據 light 可選 new

A.1 聚合

  聚合操作符(見表A-1),所有的結果只有一個值而不是一個序列。 Average 和 Sum 針對數值 (任何內置數值類型)序列或使用委托從元素值轉換為內置數值類型的元素序列。 Min 和 Max 具有 不同數值類型的重載,不過也只能在對元素類型使用默認比較符或使用轉換委托的序列上進行操 作。 Count 和 LongCount 是等價的,不同之處僅僅在於返回類型。它們兩者都具有兩個重載—— 一個只統計序列長度,一個可以接受謂詞,即只統計與謂詞匹配的元素。

            string[] words = { "zero", "one", "two", "three", "four" };
            int[] number = { 0, 1, 2, 3, 4 };

            var n1 = number.Sum();
            var n2 = number.Count();
            var n3 = number.Average();
            var n4 = number.LongCount(x => x % 2 == 0);
            var n5 = number.Aggregate("seed", (current, item) => current + item, result => result.ToUpper());

            var w1 = words.Min(word => word.Length);
            var w2 = words.Max(word => word.Length);

  最常見的聚合操作符就是 Aggregate (表A-1最後一行)。所有的其他聚合操作符都能表示 為對 Aggregate 的調用,雖然這樣做會相對繁瑣。其基本思想就是,總是存在以初始元素開頭的 “當前結果”。聚合委托被應用於輸入序列的每個元素;委托取得當前結果和輸入元素,並生成下 一個結果。作為最終可選步驟,轉換被應用於聚合結果上,並將其轉換為這個方法的返回值。如 果有必要,這種轉換可以產生不同的數據類型。這雖然不像聽起來那麽復雜,不過你依舊不希望 頻繁地使用它。

  所有的聚合操作符都使用立即執行的模式。沒有使用謂詞的 Count 方法的重載為實現了 ICollection 和 ICollection<T> 的類型進行了優化。屆時,將使用集合的 Count 屬性,無須讀 取任何數據 。

A.2 連接

  只存在一個連接操作符: Concat (見表A-2)。如你所料,它會對兩個序列進行操作,並 返回一個單獨的序列,該序列中包含了第1個序列和第2個序列中所有元素,且第2個序列連接 在第1個序列的後面。兩個輸入序列必須具有相同的類型,使用延遲執行模式,並且均為流式 數據。

1             int[] number = { 0, 1, 2, 3, 4 };
2             var n = number.Concat(new[] { 1, 2, 3 });

【Linq】標準查詢操作符