テスターですが何か?

ホビープログラマ略してHPです

Linq to Entitiesの構文(Distinct, Count, Join)

leave a comment »

Distinct

テーブルの中に、以下のようなデータが入っていると仮定します。

image

このデータからTag列が重複したデータを省きたいと思います。SQLではこう書きますね。

image

Linq to Entitiesで書くとこうなります。

var q = (from t in db.Tags
              where t.Tag == "音楽"
              select t.Tag).Distinct();

クエリ全体をDistinctするだけです。ね、簡単でしょ?

Count

次は集計関数Countです。ある列の値ごとのレコード数を求めます。SQLでいうとこういう構文です。

image
Linq to Entitiesで書くとこうなります。

var q = from m in db.Tags
             group m by m.Tag into g
             orderby g.Count() descending
             select new { Name = g.Key, Count = g.Count() };

他にも書き方はあると思いますが、この書き方がもっともSQLに近いと思います。group byの部分がSQLと異なるのと、実行結果が匿名型になるのがポイントです。

ね、簡単でしょ?

Join

最後はJoinです。こういう関係になっているテーブルに対して

image

こういうSQLを実行させます。

image

Linq to Entitiesで書くとこうなります。

var q = from t1 in db.Tags
             join m1 in db.Movies on t1.MovieSeq equals m1.Seq
             join t2 in db.Tags on m1.Seq equals t2.MovieSeq
             where t1.Tag ==
“音楽”
             select t2;

ね、簡単でしょ?

Linq to Entitiesに限らず、LinqはSQLとほぼ同じ構文で記述できるので「こういうSQLが書きたい」というイメージができていればそれほど悩まずに記述が出来るのではと思います。

Written by david9142

2011年2月13日 @ 11:26 PM

カテゴリー: DT31Demo

Tagged with , ,

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。