LINQ to Entitiesとは

 前節のサンプルでは、データベースのデータをオブジェクトとして扱い、その中のデータを表示しました。データを取り出す際にLINQを使用しました。

 LINQ(Language Integrated Query)は、オブジェクトやデータベースやエンティティなどの様々なデータソースに対して統一的にアクセスるための仕組みです。LINQにはいくつかの種類があります。

 今回は、「LINQ to Entities」を扱います。LINQ to Entitiesは次のようにLINQクエリ式を使用してデータを参照できます。

LINQクエリ式の書式
var 変数名 = from 変数名 in データソース
          where 条件
          select 変数名;

 クエリ式はfrom句で始めます。from句では処理対象となるデータソースと、処理対象の一つの要素を格納する変数を指定します。where句では、データソースのどの要素を返すかを指定します。select句では、クエリを実行したときに生成される値の型を指定します。

○ プロジェクト

 プロジェクトを作成して確認してみましょう。今回のプロジェクトではUsersテーブルから指定した条件のデータを取り出してみましょう。

プロジェクトの種類 コンソール アプリケーション
プロジェクト名 LINQSelectTest

サンプルダウンロード

○ 作成の準備

 「EntityFrameworkTest」プロジェクトを修正して作成しましょう。EntityFrameworkTestフォルダーをコピーして、作成するプロジェクト名にフォルダー名を変更してください。

○ プログラム

 Mainメソッドを次のように記述してください。

Program.cs

  1. static void Main(string[] args)
  2. {
  3.  //コンテキストを生成する
  4.  BooksEntities entities = new BooksEntities();
  5.  //Usersクラスからデータを取得する
  6.  var data = from line in entities.Users
  7.       where !line.Password.Contains("pass")
  8.       select line;
  9.  //取得したデータを表示する
  10.  Console.WriteLine("パスワードに「pass」を含まないデータ一覧");
  11.  Console.WriteLine("ID : ユーザー名 : パスワード : 氏名");
  12.  foreach (var l in data)
  13.  {
  14.   Console.WriteLine("{0} : {1} : {2} : {3}", l.Id, l.UserName, l.Password, l.Name);
  15.  }
  16.  Console.ReadLine();
  17. }

○ 実行結果

パスワードに「pass」を含まないデータ一覧
ID : ユーザー名 : パスワード : 氏名
1 : sato : csharp : 佐藤

○ 解説

 17~19行目ではLINQを使ってデータを取り出しています。18行目のselect句の「entities.Users」はentitiesオブジェクト内のUsersテーブルを表すオブジェクトを指定しています。このUsersオブジェクト内にある要素をline変数にセットして処理します。17行目では取り出すデータの条件を指定しています。今回は、取り出した要素のPasswordプロパティの値に「pass」という文字列が含まれないという条件を指定しています。where句では条件がtrueとなるように指定します。19行目のselect句ではUsersオブジェクトから取り出した要素が格納されているline変数を指定しています。このLINQにより、UsersテーブルからPassword列に「pass」が含まれないレコードを抽出することができます。今回は取り出したデータをdata変数に格納しています。

 LINQでは次のようなキーワードを使うことができます。

■ データソースごとのクラス

キーワード 概要
from データソースやデータの集合を指定する
where ソースのフィルター条件を指定する
select クエリ実行で返されるシーケンスに含まれる要素の型と形状を指定する
group 指定したキー値に基づき、クエリ結果をグループ化する
into joinキーワード、groupキーワード、selectキーワードの結果への参照として使用する識別子を指定する
orderby クエリ結果を昇順、降順で並べ替える
join 2つのデータソースを結合する
let クエリ式のサブ式の結果を格納する
in joinキーワードで使う
on joinキーワードで使う
equals joinキーワードで使う
by groupキーワードで使う
accending orderbyキーワードで使う
descending orderbyキーワードで使う
LINQのキーワード

前へ   次へ