前節のサンプルでは、データベースのデータをオブジェクトとして扱い、その中のデータを表示しました。データを取り出す際に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
○ 実行結果
パスワードに「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キーワードで使う |