今回は、Count(LongCount)拡張メソッドについてです。
Count拡張メソッドは、文字通り件数を返します。
Count拡張メソッドの書式は以下の通りです。
public static int Count<TSource>( this IEnumerable<TSource> source ) public static int Count<TSource>( this IEnumerable<TSource> source, Func<TSource, bool> predicate )
一つ目の書式が一番よく利用される形のものですね。
2つめの書式は、一つ目の分にpredicateが追加されています。
このオーバーロードを利用すると、特定の条件に一致するデータの件数を取得する事が出来ます。
結構便利です。ちなみに、
xxxx.Where(....).Count()
としても同じ事になります。
同じ目的で利用出来るものとして、LongCount拡張メソッドというものもあります。
このメソッドは、文字通り結果をLongで返してくれます。
使い方は、Count拡張メソッドと全く同じです。
以下、サンプルです。
#region LinqSamples-32 public class LinqSamples32 : IExecutable { class Person { public string Name { get; set; } public override string ToString() { return string.Format("[NAME={0}]", Name); } } public void Execute() { var people = new Person[] { new Person{ Name = "gsf_zero1" }, new Person{ Name = "gsf_zero2" }, new Person{ Name = "gsf_zero3" }, new Person{ Name = "gsf_zero4" } }; // // Count拡張メソッドは、シーケンスの要素数を取得するメソッドである。 // // Count拡張メソッドには、predicateを指定できるオーバーロードが存在し // それを利用すると、特定の条件に一致するデータのみの件数を求める事が出来る。 // // 尚、非常に多くの件数を返す可能性がある場合は、Countの代わりにLongCount拡張メソッドを // 使用する。使い方は、Count拡張メソッドと同じ。 // // predicate無しで実行. // Console.WriteLine("COUNT = {0}", people.Count()); // // predicate有りで実行. // Console.WriteLine("COUNT = {0}", people.Count(person => int.Parse(person.Name.Last().ToString()) % 2 == 0)); // // predicate無しで実行.(LongCount) // Console.WriteLine("COUNT = {0}", people.LongCount()); // // predicate有りで実行.(LongCount) // Console.WriteLine("COUNT = {0}", people.LongCount(person => int.Parse(person.Name.Last().ToString()) % 2 == 0)); } } #endregion
実行結果は以下の通りです。
COUNT = 4 COUNT = 2 COUNT = 4 COUNT = 2
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ