【C#】Linq の基本

C#で便利な機能といえば「Linq」です。 上手く使えば、コードも読みやすくなり、また複雑処理も実装をすることができます。 このLinqについて、あまり詳しくなかったので、今回勉強をしてみました。

Linq の 基本

  • form句から始まる
  • 条件式( whereなど)を入れる
  • select もしくは group句で終わる

[c] int nums = { 1, 2, 3, 4, 5 }; // n:範囲変数 nums:データソース var lists = from n in nums where n > 3 select n; [/c]

Linqで検索をした クエリ変数(上記ではlists)は、foreachを使って取り出すことができます。 [c] foreach (int i in lists) { Debug.LogError ("i:" + i); } [/c]

クエリ変数はIEnumerableインターフェイスを実装しているので、型の推論ができるのでvar型を使うことができます。

where

条件式として利用するのがwhere句です。 bool型を返す条件式であれば、どんな式でも使うことができます。 一つの条件式だけではなく、複数の条件式を使うことができます。 [c] int nums = { 1, 2, 3, 4, 5 }; var lists = from n in nums where n > 3 where n < 5 select n;

[/c]

orderby

並べ替えを行う場合には、[oederby]を使うのが便利です。 [c] int nums = { 3, 4, 1, 2, 20, 9 }; var lists = from num in nums orderby num select num; [/c]

orderbyは、昇順と降順が指定できます。 昇順はデフォルトなので、何も指定をしない場合は自動的に昇順になります。 [c] //降順 var lists = from num in nums orderby num descending select num;

[/c]

select

条件式で得られた値を返すのでselect句です。 ただ値を返すのではなく、任意のデータ形式に変換をすることもできます。

group

keyを指定してグループを作成します。 型は、IGroupoing<Tkey,TElement>になり、foreachを使って中身を取り出します。 [c] var hoge = from num in nums where 条件式 group (範囲変数) by (キー) ; [/c]

ラムダ式

これまではクエリ構文と呼ばれる記載をしてきましたが、実際に利用する際にはクエリメソッドと「ラムダ式」を使ったほうが可視性が上がります。

Where

クエリメソッド[Where]を使う場合、下記のような記述になります。 かなりすっきりとしているのではないでしょうか? [c] var lists = num.Where (n => n > 3).Select (n => n); foreach (int i in lists) { Debug.LogError ("中身:" + i); } [/c]

OrderBy

同じような感じで、OrderByも使うことができます。 降順では[OrderByDescending]を利用します。 [c] var lists = nums.OrderBy (n => n).Select (n => n * 2); foreach (int i in lists) { Debug.LogError ("中身:" + i); } [/c]

その他

これ以外にも色々なメソッドが用意されています。 [c] int nums = { 1, 2, 3, 4, 5 }; var max = nums.Max(); // 最大値 var min = nums.Min(); // 最小値 var _sum = nums.Sum(); //足し算

// 指定された条件を満たしていれば、trueを返す var list = nums.Any (n => (n % 2) == 0); [/c]

独習C# 第3版独習C# 第3版
ハーバート・シルト,エディフィストラーニング株式会社 矢嶋聡

翔泳社
売り上げランキング : 8821

Amazonで詳しく見る