[C#]Linqの使い方

C#を使ってプログラミングをしている皆さん(VB.netも)Linq使ってますか?自分は毎回使ってます。なぜならLinqが大好きだからです。
簡単な処理から難しい処理までなんでもこなせるLinqは本当に素晴らしいと思います。C#を使っていてLinqを使用しないのは勿体無いとまで言えます!(言い過ぎ?)

Linqとは

いまさら感もありますがLinqとはなんぞや?から

統合言語クエリ

統合言語クエリ (LINQ, Language INtegrated Query, リンクと発音する)とは、.NET Framework 3.5において、様々な種類のデータ集合に対して標準化された方法でデータを問い合わせる(クエリ)ことを可能にするために、言語に統合された機能のことである。

Wikipedia

大まかに言うとデータにもCSVやデータベースなど色々なデータ形式があるので、全てを統合して処理が出来る言語を用意しましたと言ったところです。

Linqのいいところ

何と言ってもデータベースなどからデータを取得する際にSQLを意識しなくていい点ですよね。最近のORMが主流となった現代では当たり前のように機能があったりします。ASP.netでもMVCが合ったりRuby On RailsでもSQLを意識しなくてもデータ取得が出来るようになっていますね。
基本的な考え方としてデータベースのデータもコード内で定義された変数も全てをオブジェクトとして考えているのが凄いポイントだと思っています。

変数への参照やデータ加工 メソッドなど
データベースへの参照 SQL

となっていたところを

変数への参照やデータ加工 Linq
データベースへの参照 Linq

というように全て同じものとして処理が出来るんですよね

サンプル

EntityFrameworkを使用してデータを取得する前提ですで、データ構成は前回のものを参照します。
なお、Linqにはメソッド構文とクエリ構文がありますが自分はいつもメソッド構文を使っています。理由は特にありません、ただ単にメソッド構文で慣れてしまったからです。
https://programchan.com/archives/220

データを全て取得

//全てのデータを取得
var ret = context.Hoges.ToList();

データを一件だけ取得

//名前が"some"のデータで最初の一件を取得
var some = context.Hoges.First(x => x.name == "some");
//名前が"some"のデータで最後の一件を取得
var some = context.Hoges.Last(x => x.name == "some");
//名前が"some"のデータで一件を指定せずに取得
var some = context.Hoges.Single(x => x.name == "some");

データの順序を変更

//名前を昇順で並べる
var some = context.Hoges.Orderby(x => x.name == "some");
//名前を降順で並べる
var some = context.Hoges.OrderByDescending(x => x.name == "some");

データの検索

//名前がsomeを条件に検索
var some = context.Hoges.Where(x => x.name == "some");
//名前がsomeでidが1を条件に検索
var some = context.Hoges.Where(x => x.name == "some").Where(x => x.id = 1);

あいまい検索

//名前にsoが入っているものを条件に検索
var some = context.Hoges.Where(x => x.name.Contains("so"));

etc

他にも色々メソッドはありますが紹介しきれません。DictinctやSelectにCountはよく使います。

LINQの拡張メソッド一覧と、ほぼ全部のサンプルを作ってみました。

[amazonjs asin=”4774149756″ locale=”JP” title=”【省エネ対応】 C#プログラムの効率的な書き方”]

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です