• 検索結果がありません。

基本サンプル

N/A
N/A
Protected

Academic year: 2022

シェア "基本サンプル"

Copied!
31
0
0

読み込み中.... (全文を見る)

全文

(1)

SQLCompiler for LINQ(C#)

のサンプル

(基本サンプル)

<一覧表>

ファイル名 : 前版サンプルから更新したファイル名

ファイル名 説明 リンク

No1.linq 単一テーブルを使用する 表 1

No2.linq 2つのテーブルのクロス結合を使用する 表 2

No3.linq 2つのテーブルの内部結合を使用する 表 3

No4.linq No3.linq で GROUP BY 句, ORDER BY 句, COUNT(*)を使用する 表 4

No5.linq 二項演算子(+)を使用する 表 5

No6.linq 単純 CASE 式を使用する 表 6

No7.linq 検索 CASE 式を使用する 表 7

No8.linq 単項演算子と括弧式を使用する 表 8

No9.linq 検索条件に括弧を使用する 表 9

No10.linq 検索条件に NOT を使用する 表 10

No11.linq 数値(小数)リテラルを使用する 表 11

No12.linq GROUP BY 句と AVG 関数を使用する 表 12

No13.linq No12.linq の AVG 関数に DISTINCT を使用する 表 13

No14.linq GROUP BY 句と COUNT 関数を使用する 表 14

No15.linq No14.linq の COUNT 関数に DISTINCT を使用する 表 15

No16.linq FROM 句でサブクエリを使用する 表 16

No17.linq WHERE 句でサブクエリを使用する 表 17

No17_2.linq No17.linq と等価な SQL を IN 限定子を使用して作成する 表 17_2

No18.linq HAVING 句でサブクエリを使用する 表 18

No19.linq 選択リストでサブクエリを使用する 表 19

No20.linq LIKE 限定子を使用する 表 20

No21.linq No20.linq で NOT LIKE 限定子を使用する 表 21

No22.linq No21.linq の述語全体を否定する 表 22

No23.linq BETWEEN 限定子を使用する 表 23

No24.linq No23.linq で NOT BETWEEN 限定子を使用する 表 24

No25.linq No24.linq の述語全体を否定する 表 25

No26.linq IS NULL 限定子を使用する 表 26

No27.linq No26.linq で IS NOT NULL 限定子を使用する 表 27

No28.linq No27.linq の述語全体を否定する 表 28

No29.linq IN 限定子を使用する 表 29

No30.linq No29.linq で NOT IN 限定子を使用する 表 30

(2)

No31.linq No30.linq の述語全体を否定する 表 31

No32.linq EXISTS 限定子を使用する 表 32

No33.linq No32.linq を NOT EXISTS 限定子にする 表 33

No34.linq ALL 限定子を使用する 表 34

No35.linq No34.linq を NOT ALL 限定子にする 表 35

No36.linq ANY 限定子を使用する 表 36

No37.linq No36.linq で NOT ANY 限定子を使用する 表 37

No38.linq IN 限定子を使用する 表 38

No39.linq No38.linq で NOT IN 限定子を使用する 表 39

No40.linq No39.linq の述語全体を否定する 表 40

No43.linq 自己結合を使用する 表 43

No45.linq 集合演算を FROM 句で使用する 表 45

No46.linq 集合演算を WHERE 句で使用する 表 46

No46_2.linq No46.linq の WHERE 句で IN 限定子を使用する 表 46_2

No47.linq 集合演算を選択リストで使用する 表 47

No48.linq 集合演算をルートクエリで使用する 表 48

No49.linq ビット型を FROM 句で使用する 表 49

No50.linq No49.linq の 2 つ目の結合キーの左辺と右辺を入れ替える 表 50 No50_2.linq No50.linq の 2 つ目の結合キーを WHEHE 句に移動する 表 50_2

No51.linq ビット型を WHERE 句で使用する 表 51

No52.linq ビット型を選択リストで使用する 表 52

No53.linq 時間型を FROM 句で使用する 表 53

No54.linq 時間型を WHERE 句で使用する 表 54

No55_2.linq 時間型を選択リストで使用する(1) 表 55_2

No55_3.linq 時間型を選択リストで使用する(2) 表 55_3

No55_5.linq 時間型を選択リストで使用する(3) 表 55_5

No56_2.linq 選択リストで 「リレーションエイリアス.*」を指定する 表 56_2

No57_2.linq 選択リストで 「テーブル名.*」を指定する 表 57_2

No58_2.linq テーブルにエイリアスを付与しないでテーブル名を直接使用する 表 58_2

No59.linq ORDER BY 句を数値で指定する 表 59

No60.linq ORDER BY 句をカラム名で指定する(1) 表 60

No61.linq ORDER BY 句をカラム名で指定する(2) 表 61

No62.linq ORDER BY 句で選択リストに含まれないカラム名を指定する(1) 表 62 No63.linq ORDER BY 句で選択リストに含まれないカラム名を指定する(2) 表 63

No75.linq 集合演算に ORDER BY 句を使用する 表 75

(3)

ファイル名 No1.linq

説明 単一テーブルを使用する

T-SQL SELECT TOP 10 au_lname, au_fname FROM authors

WHERE au_id = '172-32-1176' LINQ コード authors

.Where(x1 => x1.au_id == "172-32-1176") .Select(x1 => new

{

x1.au_lname, x1.au_fname })

.Take(10);

TopPage

ファイル名 No2.linq

説明 2つのテーブルのクロス結合を使用する

T-SQL SELECT t2.au_id, t1.au_lname

FROM authors AS t1, titleauthor AS t2 WHERE t1.au_id = t2.au_id

LINQ コード authors

.SelectMany(t2 => titleauthors, (t1, t2) => new{t1, t2}) .Where(x1 => x1.t1.au_id == x1.t2.au_id) .Select(x1 => new

{

x1.t2.au_id, x1.t1.au_lname });

TopPage

ファイル名 No3.linq

説明 2つのテーブルの内部結合を使用する

T-SQL SELECT t2.au_id, t1.au_lname

FROM authors AS t1 INNER JOIN titleauthor AS t2 ON t1.au_id = t2.au_id

LINQ コード authors

.Join(titleauthors, t1 => t1.au_id, t2 => t2.au_id,

(t1, t2) => new{t1, t2}) .Select(x1 => new

(4)

{

x1.t2.au_id, x1.t1.au_lname });

TopPage

ファイル名 No4.linq

説明 No3.linq で GROUP BY 句, ORDER BY 句, COUNT(*)を使用する T-SQL SELECT t2.au_id, COUNT(*)

FROM authors AS t1 INNER JOIN titleauthor AS t2 ON t1.au_id = t2.au_id

GROUP BY t2.au_id ORDER BY t2.au_id DESC LINQ コード authors

.Join(titleauthors, t1 => t1.au_id, t2 => t2.au_id,

(t1, t2) => new{t1, t2})

.GroupBy(x1 => new{grKey1 = x1.t2.au_id}) .Select(g1 => new

{

au_id = g1.Key.grKey1, root_alias_2 = g1.Count() })

.OrderByDescending(t => t.au_id);

TopPage

ファイル名 No5.linq

説明 二項演算子(+)を使用する

T-SQL SELECT au_lname + '-' + au_fname AS au_name FROM authors

WHERE au_id = '172-32-1176' LINQ コード authors

.Where(x1 => x1.au_id == "172-32-1176") .Select(x1 => new

{

au_name = x1.au_lname + "-" + x1.au_fname });

TopPage

ファイル名 No6.linq

説明 単純 CASE 式を使用する

T-SQL SELECT t2.au_id, CASE COUNT(*)

WHEN 1 THEN 'one'

(5)

WHEN 2 THEN 'two' ELSE 'over' END AS kosu FROM authors AS t1 INNER JOIN titleauthor AS t2

ON t1.au_id = t2.au_id GROUP BY t2.au_id

LINQ コード authors

.Join(titleauthors, t1 => t1.au_id, t2 => t2.au_id,

(t1, t2) => new{t1, t2})

.GroupBy(x1 => new{grKey1 = x1.t2.au_id}) .Select(g1 => new

{

au_id = g1.Key.grKey1,

kosu = (g1.Count() == 1 ? "one" :

g1.Count() == 2 ? "two" : "over") });

TopPage

ファイル名 No7.linq

説明 検索 CASE 式を使用する

T-SQL SELECT t2.au_id, CASE WHEN COUNT(*) <= 2 THEN 'onetwo' ELSE 'over' END AS kosu

FROM authors AS t1 INNER JOIN titleauthor AS t2 ON t1.au_id = t2.au_id

GROUP BY t2.au_id LINQ コード authors

.Join(titleauthors, t1 => t1.au_id, t2 => t2.au_id,

(t1, t2) => new{t1, t2})

.GroupBy(x1 => new{grKey1 = x1.t2.au_id}) .Select(g1 => new

{

au_id = g1.Key.grKey1,

kosu = (g1.Count() <= 2 ? "onetwo" : "over") });

TopPage

ファイル名 No8.linq

説明 単項演算子と括弧式を使用する

T-SQL SELECT au_id, -(au_ord + royaltyper) AS var FROM titleauthor

WHERE au_id = '172-32-1176' LINQ コード titleauthors

.Where(x1 => x1.au_id == "172-32-1176")

(6)

.Select(x1 => new {

x1.au_id,

var = -(x1.au_ord + x1.royaltyper) });

TopPage

ファイル名 No9.linq

説明 検索条件に括弧を使用する

T-SQL SELECT au_id FROM titleauthor

WHERE (au_id = '172-32-1176' AND

((title_id = 'PS3333' OR title_id = 'BU1032') AND

(au_ord = 1 OR au_ord = 2)) AND

royaltyper = 100) LINQ コード titleauthors

.Where(x1 => (x1.au_id == "172-32-1176" && ((x1.title_id == "PS3333" ||

x1.title_id == "BU1032") &&

(x1.au_ord == 1 || x1.au_ord == 2)) && x1.royaltyper ==

100))

.Select(x1 => new {

x1.au_id });

TopPage

ファイル名 No10.linq

説明 検索条件に NOT を使用する

T-SQL SELECT au_id FROM titleauthor

WHERE (NOT au_id = '172-32-1176' AND NOT

(au_ord = 3 OR au_ord = 1) AND NOT royaltyper = 40) LINQ コード titleauthors

.Where(x1 => (!(x1.au_id == "172-32-1176") && !(x1.au_ord == 3 ||

x1.au_ord == 1) && !(x1.royaltyper == 40))) .Select(x1 => new

{

x1.au_id });

TopPage

ファイル名 No11.linq

(7)

説明 数値(小数)リテラルを使用する

T-SQL SELECT au_id, au_ord + 1.1 AS goukei FROM titleauthor

WHERE au_id = '172-32-1176' LINQ コード titleauthors

.Where(x1 => x1.au_id == "172-32-1176") .Select(x1 => new

{

x1.au_id,

goukei = x1.au_ord + 1.1 });

TopPage

ファイル名 No12.linq

説明 GROUP BY 句と AVG 関数を使用する

T-SQL SELECT au_ord, AVG(royaltyper) AS heikin FROM titleauthor

GROUP BY au_ord LINQ コード titleauthors

.GroupBy(x1 => new{grKey1 = x1.au_ord}) .Select(g1 => new

{

au_ord = g1.Key.grKey1,

heikin = g1.Average(x1 => x1.royaltyper) });

TopPage

ファイル名 No13.linq

説明 No12.linq の AVG 関数に DISTINCT を使用する

T-SQL SELECT au_ord, AVG(DISTINCT royaltyper) AS heikin FROM titleauthor

GROUP BY au_ord LINQ コード titleauthors

.GroupBy(x1 => new{grKey1 = x1.au_ord}) .Select(g1 => new

{

au_ord = g1.Key.grKey1,

heikin = g1.Select(x1 => (int?)(x1.royaltyper)).Distinct().Average()

});

TopPage

ファイル名 No14.linq

説明 GROUP BY 句と COUNT 関数を使用する

(8)

T-SQL SELECT au_ord, COUNT(au_ord) AS kosuu FROM titleauthor

GROUP BY au_ord LINQ コード titleauthors

.GroupBy(x1 => new{grKey1 = x1.au_ord}) .Select(g1 => new

{

au_ord = g1.Key.grKey1,

kosuu = g1.Count(x1 => g1.Key.grKey1 != null) });

TopPage

ファイル名 No15.linq

説明 No14.linq の COUNT 関数に DISTINCT を使用する

T-SQL SELECT au_ord, COUNT(DISTINCT royaltyper) AS kosuu FROM titleauthor

GROUP by au_ord LINQ コード titleauthors

.GroupBy(x1 => new{grKey1 = x1.au_ord}) .Select(g1 => new

{

au_ord = g1.Key.grKey1,

kosuu = g1.Where(x1 => x1.royaltyper != null).Select(x1 =>

x1.royaltyper).Distinct().Count() });

TopPage

ファイル名 No16.linq

説明 FROM 句でサブクエリを使用する

T-SQL SELECT t2.au_id, t2.au_lname + ' ' + t2.au_fname AS namae, t1.royaltyper FROM (SELECT au_id, royaltyper

FROM titleauthor

WHERE royaltyper = 100) AS t1 INNER JOIN authors AS t2 ON t1.au_id = t2.au_id

LINQ コード titleauthors

.Where(x2 => x2.royaltyper == 100) .Select(x2 => new

{

x2.au_id, x2.royaltyper })

.Join(authors,

t1 => t1.au_id, t2 => t2.au_id,

(t1, t2) => new{t1, t2}) .Select(x1 => new

(9)

{

x1.t2.au_id,

namae = x1.t2.au_lname + " " + x1.t2.au_fname, x1.t1.royaltyper

});

TopPage

ファイル名 No17.linq

説明 WHERE 句でサブクエリを使用する

T-SQL SELECT t1.au_id

FROM titleauthor AS t1 WHERE (SELECT t2.au_id

FROM authors AS t2

WHERE t1.au_id = t2.au_id AND t1.royaltyper = 100)

= '172-32-1176' LINQ コード titleauthors

.Where(x1 => authors

.Where(x2 => x1.au_id == x2.au_id && x1.royaltyper == 100) .Select(x2 => new

{

x2.au_id

}).Any(t => "172-32-1176" == t.au_id)) .Select(x1 => new

{

x1.au_id });

TopPage

ファイル名 No17_2.linq

説明 No17.linq と等価な SQL を IN 限定子を使用して作成する

T-SQL SELECT t1.au_id

FROM titleauthor AS t1

WHERE '172-32-1176' IN (SELECT t2.au_id FROM authors AS t2

WHERE t1.au_id = t2.au_id AND t1.royaltyper = 100) LINQ コード titleauthors

.Where(x1 => authors

.Where(x2 => x1.au_id == x2.au_id && x1.royaltyper == 100) .Select(x2 => new

{

x2.au_id

}).Any(t => "172-32-1176" == t.au_id)) .Select(x1 => new

{

(10)

x1.au_id });

TopPage

ファイル名 No18.linq

説明 HAVING 句でサブクエリを使用する

T-SQL SELECT stor_id FROM sales GROUP BY stor_id

HAVING AVG(qty) > (SELECT AVG(qty) FROM sales

WHERE payterms = 'Net 30' GROUP BY payterms)

LINQ コード sales

.GroupBy(x1 => new{grKey1 = x1.stor_id})

.Where(g1 => g1.Average(x1 => (int?)(x1.qty)) > sales

.Where(x2 => x2.payterms

== "Net 30")

.GroupBy(x2 => new {grKe y2 = x2.payterms})

.Select(g2 => g2.Average (x2 => (int?)(x2.qty))).SingleOrDefault())

.Select(g1 => new {

stor_id = g1.Key.grKey1 });

TopPage

ファイル名 No19.linq

説明 選択リストでサブクエリを使用する

T-SQL SELECT stor_id, qty - (SELECT AVG(qty) FROM sales

WHERE stor_id = '7067' GROUP BY stor_id) AS diff FROM sales

WHERE stor_id = '7067' LINQ コード sales

.Where(x1 => x1.stor_id == "7067") .Select(x1 => new

{

x1.stor_id,

diff = x1.qty - sales

.Where(x2 => x2.stor_id == "7067") .GroupBy(x2 => new{grKey1 = x2.stor_id})

.Select(g1 => g1.Average(x2 => (int?)(x2.qty))).Sing leOrDefault()

(11)

});

TopPage

ファイル名 No20.linq

説明 LIKE 限定子を使用する

T-SQL SELECT au_id, title_id FROM titleauthor

WHERE title_id LIKE 'PS%' LINQ コード titleauthors

.Where(x1 => System.Data.Linq.SqlClient.SqlMethods.Like(x1.title_id,

"PS%"))

.Select(x1 => new {

x1.au_id, x1.title_id });

TopPage

ファイル名 No21.linq

説明 No20.linq で NOT LIKE 限定子を使用する T-SQL SELECT au_id, title_id

FROM titleauthor

WHERE title_id NOT LIKE 'PS%' LINQ コード titleauthors

.Where(x1 => !(System.Data.Linq.SqlClient.SqlMethods.Like(x1.title_id,

"PS%")))

.Select(x1 => new {

x1.au_id, x1.title_id });

TopPage

ファイル名 No22.linq

説明 No21.linq の述語全体を否定する

T-SQL SELECT au_id, title_id FROM titleauthor

WHERE NOT title_id NOT LIKE 'PS%' LINQ コード titleauthors

.Where(x1 => System.Data.Linq.SqlClient.SqlMethods.Like(x1.title_id,

"PS%"))

.Select(x1 => new {

(12)

x1.au_id, x1.title_id });

TopPage

ファイル名 No23.linq

説明 BETWEEN 限定子を使用する

T-SQL SELECT au_id, royaltyper FROM titleauthor

WHERE royaltyper BETWEEN 75 AND 100 LINQ コード titleauthors

.Where(x1 => x1.royaltyper >= 75 && x1.royaltyper <= 100) .Select(x1 => new

{

x1.au_id, x1.royaltyper });

TopPage

ファイル名 No24.linq

説明 No23.linq で NOT BETWEEN 限定子を使用する T-SQL SELECT au_id, royaltyper

FROM titleauthor

WHERE royaltyper NOT BETWEEN 75 AND 100 LINQ コード titleauthors

.Where(x1 => !(x1.royaltyper >= 75 && x1.royaltyper <= 100)) .Select(x1 => new

{

x1.au_id, x1.royaltyper });

TopPage

ファイル名 No25.linq

説明 No24.linq の述語全体を否定する

T-SQL SELECT au_id, royaltyper FROM titleauthor

WHERE NOT royaltyper NOT BETWEEN 75 AND 100 LINQ コード titleauthors

.Where(x1 => x1.royaltyper >= 75 && x1.royaltyper <= 100) .Select(x1 => new

{

x1.au_id,

(13)

x1.royaltyper });

TopPage

ファイル名 No26.linq

説明 IS NULL 限定子を使用する

T-SQL SELECT title_id FROM titles

WHERE price IS NULL LINQ コード titles

.Where(x1 => x1.price == null) .Select(x1 => new

{

x1.title_id });

TopPage

ファイル名 No27.linq

説明 No26.linq で IS NOT NULL 限定子を使用する T-SQL SELECT title_id

FROM titles

WHERE price IS NOT NULL LINQ コード titles

.Where(x1 => !(x1.price == null)) .Select(x1 => new

{

x1.title_id });

TopPage

ファイル名 No28.linq

説明 No27.linq の述語全体を否定する

T-SQL SELECT title_id FROM titles

WHERE NOT price IS NOT NULL LINQ コード titles

.Where(x1 => x1.price == null) .Select(x1 => new

{

x1.title_id });

TopPage

(14)

ファイル名 No29.linq

説明 IN 限定子を使用する

T-SQL SELECT au_ord FROM titleauthor WHERE au_ord IN (2,3) LINQ コード titleauthors

.Where(x1 => (new int?[]{2, 3}).Contains(x1.au_ord)) .Select(x1 => new

{

x1.au_ord });

TopPage

ファイル名 No30.linq

説明 No29.linq で NOT IN 限定子を使用する T-SQL SELECT au_ord

FROM titleauthor

WHERE au_ord NOT IN (2,3) LINQ コード titleauthors

.Where(x1 => !((new int?[]{2, 3}).Contains(x1.au_ord))) .Select(x1 => new

{

x1.au_ord });

TopPage

ファイル名 No31.linq

説明 No30.linq の述語全体を否定する

T-SQL SELECT au_ord FROM titleauthor

WHERE NOT au_ord NOT IN (2,3) LINQ コード titleauthors

.Where(x1 => (new int?[]{2, 3}).Contains(x1.au_ord)) .Select(x1 => new

{

x1.au_ord });

TopPage

ファイル名 No32.linq

説明 EXISTS 限定子を使用する

(15)

T-SQL SELECT t1.title_id FROM titles AS t1 WHERE EXISTS (SELECT *

FROM titleauthor AS t2

WHERE t1.title_id = t2.title_id AND t2.au_ord = 3) LINQ コード titles

.Where(x1 => titleauthors.Any(x2 => x1.title_id == x2.title_id &&

x2.au_ord == 3)) .Select(x1 => new {

x1.title_id });

TopPage

ファイル名 No33.linq

説明 No32.linq を NOT EXISTS 限定子にする T-SQL SELECT t1.title_id

FROM titles AS t1

WHERE NOT EXISTS (SELECT *

FROM titleauthor AS t2

WHERE t1.title_id = t2.title_id AND t2.au_ord = 3) LINQ コード titles

.Where(x1 => !(titleauthors.Any(x2 => x1.title_id == x2.title_id &&

x2.au_ord == 3))) .Select(x1 => new {

x1.title_id });

TopPage

ファイル名 No34.linq

説明 ALL 限定子を使用する

T-SQL SELECT stor_id FROM sales GROUP BY stor_id

HAVING AVG(qty) >= ALL (SELECT AVG(qty) FROM sales

GROUP BY payterms) LINQ コード sales

.GroupBy(x1 => new{grKey1 = x1.stor_id}) .Where(g1 => sales

.GroupBy(x2 => new {grKey2 = x2.payterms}) .Select(g2 => new

{

(16)

res1 = g2.Average(x2 => (int?)(x2.qty))

}).All(t => g1.Average(x1 => (int?)(x1.qty)) >= t.res1)) .Select(g1 => new

{

stor_id = g1.Key.grKey1 });

TopPage

ファイル名 No35.linq

説明 No34.linq を NOT ALL 限定子にする T-SQL SELECT stor_id

FROM sales GROUP BY stor_id

HAVING NOT AVG(qty) >= ALL (SELECT AVG(qty) FROM sales

GROUP BY payterms) LINQ コード sales

.GroupBy(x1 => new{grKey1 = x1.stor_id}) .Where(g1 => !(sales

.GroupBy(x2 => new {grKey2 = x2.payterms}) .Select(g2 => new

{

res1 = g2.Average(x2 => (int?)(x2.qty))

}).All(t => g1.Average(x1 => (int?)(x1.qty)) >= t.res1))) .Select(g1 => new

{

stor_id = g1.Key.grKey1 });

TopPage

ファイル名 No36.linq

説明 ANY 限定子を使用する

T-SQL SELECT stor_id FROM sales GROUP BY stor_id

HAVING AVG(qty) >= ANY (SELECT AVG(qty) FROM sales

GROUP BY payterms) LINQ コード sales

.GroupBy(x1 => new{grKey1 = x1.stor_id}) .Where(g1 => sales

.GroupBy(x2 => new {grKey2 = x2.payterms}) .Select(g2 => new

{

res1 = g2.Average(x2 => (int?)(x2.qty))

}).Any(t => g1.Average(x1 => (int?)(x1.qty)) >= t.res1))

(17)

.Select(g1 => new {

stor_id = g1.Key.grKey1 });

TopPage

ファイル名 No37.linq

説明 No36.linq で NOT ANY 限定子を使用する T-SQL SELECT stor_id

FROM sales GROUP BY stor_id

HAVING NOT AVG(qty) >= ANY (SELECT AVG(qty) FROM sales

GROUP BY payterms) LINQ コード sales

.GroupBy(x1 => new{grKey1 = x1.stor_id}) .Where(g1 => !(sales

.GroupBy(x2 => new {grKey2 = x2.payterms}) .Select(g2 => new

{

res1 = g2.Average(x2 => (int?)(x2.qty))

}).Any(t => g1.Average(x1 => (int?)(x1.qty)) >= t.res1))) .Select(g1 => new

{

stor_id = g1.Key.grKey1 });

TopPage

ファイル名 No38.linq

説明 IN 限定子を使用する

T-SQL SELECT stor_id, qty FROM sales

WHERE qty IN (SELECT qty FROM sales

WHERE payterms = 'ON invoice') LINQ コード sales

.Where(x1 => sales

.Where(x2 => x2.payterms == "ON invoice") .Select(x2 => new

{

x2.qty

}).Any(t => x1.qty == t.qty)) .Select(x1 => new

{

x1.stor_id, x1.qty

(18)

});

TopPage

ファイル名 No39.linq

説明 No38.linq で NOT IN 限定子を使用する T-SQL SELECT stor_id, qty

FROM sales

WHERE qty NOT IN (SELECT qty FROM sales

WHERE payterms = 'ON invoice') LINQ コード sales

.Where(x1 => sales

.Where(x2 => x2.payterms == "ON invoice") .Select(x2 => new

{

x2.qty

}).All(t => x1.qty != t.qty)) .Select(x1 => new

{

x1.stor_id, x1.qty });

TopPage

ファイル名 No40.linq

説明 No39.linq の述語全体を否定する

T-SQL SELECT stor_id, qty FROM sales

WHERE NOT qty IN NOT (SELECT qty FROM sales

WHERE payterms = 'ON invoice') LINQ コード sales

.Where(x1 => !(sales

.Where(x2 => x2.payterms == "ON invoice") .Select(x2 => new

{

x2.qty

}).All(t => x1.qty != t.qty))) .Select(x1 => new

{

x1.stor_id, x1.qty });

TopPage

(19)

ファイル名 No43.linq

説明 自己結合を使用する

T-SQL SELECT t1.stor_id AS store1, t2.stor_id AS store2 FROM stores AS t1, stores AS t2

WHERE t1.stor_id < t2.stor_id LINQ コード stores

.SelectMany(t2 => stores,

(t1, t2) => new{t1, t2})

.Where(x1 => string.Compare(x1.t1.stor_id,x1.t2.stor_id) < 0) .Select(x1 => new

{

store1 = x1.t1.stor_id, store2 = x1.t2.stor_id });

TopPage

ファイル名 No45.linq

説明 集合演算を FROM 句で使用する

T-SQL SELECT t3.au_id, t3.namae1, t3.r1

FROM (SELECT t2.au_id, t2.au_lname + ' ' + t2.au_fname AS namae1, t1.royaltyper AS r1

FROM (SELECT au_id, royaltyper FROM titleauthor

WHERE royaltyper = 100

) AS t1 INNER JOIN authors AS t2 ON t1.au_id = t2.au_id UNION

SELECT t2.au_id, t2.au_lname + ' ' + t2.au_fname AS namae2, t1.royaltyper AS r2

FROM (SELECT au_id, royaltyper FROM titleauthor

WHERE royaltyper <> 100

) AS t1 INNER JOIN authors AS t2 ON t1.au_id = t2.au_id ) t3

ORDER BY t3.r1 LINQ コード titleauthors

.Where(x3 => x3.royaltyper == 100) .Select(x3 => new

{

x3.au_id, x3.royaltyper })

.Join(authors,

t1 => t1.au_id, t2 => t2.au_id,

(t1, t2) => new{t1, t2}) .Select(x2 => new

(20)

{

x2.t2.au_id,

namae1 = x2.t2.au_lname + " " + x2.t2.au_fname, r1 = x2.t1.royaltyper

})

.Union(titleauthors

.Where(x5 => x5.royaltyper != 100) .Select(x5 => new

{

x5.au_id, x5.royaltyper })

.Join(authors,

t1 => t1.au_id, t2 => t2.au_id,

(t1, t2) => new{t1, t2}) .Select(x4 => new

{

x4.t2.au_id,

namae1 = x4.t2.au_lname + " " + x4.t2.au_fname, r1 = x4.t1.royaltyper

})) .Select(x1 => new {

x1.au_id, x1.namae1, x1.r1 })

.OrderBy(t => t.r1);

TopPage

ファイル名 No46.linq

説明 集合演算を WHERE 句で使用する

T-SQL SELECT t1.au_id

FROM titleauthor AS t1 WHERE (

SELECT t2.au_id FROM authors AS t2

WHERE t1.au_id = t2.au_id AND t1.royaltyper = 100 UNION

SELECT t2.au_id FROM authors AS t2

WHERE t1.au_id = t2.au_id AND t1.royaltyper <> 100 ) = '172-32-1176'

LINQ コード titleauthors

.Where(x1 => authors

.Where(x2 => x1.au_id == x2.au_id && x1.royaltyper == 100)

(21)

.Select(x2 => new {

x2.au_id })

.Union(authors

.Where(x3 => x1.au_id == x3.au_id && x1.royaltyper

!= 100)

.Select(x3 => new {

x3.au_id

})).Any(t => "172-32-1176" == t.au_id)) .Select(x1 => new

{

x1.au_id });

TopPage

ファイル名 No46_2.linq

説明 No46.linq の WHERE 句で IN 限定子を使用する T-SQL SELECT t1.au_id

FROM titleauthor AS t1 WHERE '172-32-1176' IN (

SELECT t2.au_id FROM authors AS t2

WHERE t1.au_id = t2.au_id AND t1.royaltyper = 100 UNION

SELECT t2.au_id FROM authors AS t2

WHERE t1.au_id = t2.au_id

AND t1.royaltyper <> 100) LINQ コード titleauthors

.Where(x1 => authors

.Where(x2 => x1.au_id == x2.au_id && x1.royaltyper == 100) .Select(x2 => new

{

x2.au_id })

.Union(authors

.Where(x3 => x1.au_id == x3.au_id && x1.royaltyper

!= 100)

.Select(x3 => new {

x3.au_id

})).Any(t => "172-32-1176" == t.au_id)) .Select(x1 => new

{

x1.au_id });

(22)

TopPage

ファイル名 No47.linq

説明 集合演算を選択リストで使用する

T-SQL SELECT t1.au_ord, t1.royaltyper - ( SELECT AVG(royaltyper) FROM titleauthor AS t1

WHERE t1.au_ord = 1 GROUP BY t1.au_ord UNION

SELECT AVG(royaltyper) FROM titleauthor AS t1 WHERE t1.au_ord = 1

GROUP BY t1.au_ord) AS diff FROM titleauthor AS t1

WHERE au_ord = 1 LINQ コード titleauthors

.Where(x1 => x1.au_ord == 1) .Select(x1 => new

{

x1.au_ord,

diff = x1.royaltyper - titleauthors

.Where(x2 => x2.au_ord == 1)

.GroupBy(x2 => new{grKey1 = x2.au_ord}) .Select(g1 => g1.Average(x2 =>

x2.royaltyper))

.Union(titleauthors

.Where(x3 => x3.au_ord == 1) .GroupBy(x3 => new{grKey2 = x3.au_ord})

.Select(g2 => g2.Average(x3 =>

x3.royaltyper))).SingleOrDefault() });

TopPage

ファイル名 No48.linq

説明 集合演算をルートクエリで使用する

T-SQL SELECT au_id, title_id FROM titleauthor WHERE au_ord = 1 UNION

SELECT au_id, title_id FROM titleauthor WHERE au_ord <> 1 LINQ コード titleauthors

.Where(x1 => x1.au_ord == 1) .Select(x1 => new

{

(23)

x1.au_id, x1.title_id })

.Union(titleauthors

.Where(x2 => x2.au_ord != 1) .Select(x2 => new

{

x2.au_id, x2.title_id }));

TopPage

ファイル名 No49.linq

説明 ビット型を FROM 句で使用する

T-SQL SELECT a.au_id, t.title_id

FROM authors AS a INNER JOIN titleauthor AS t ON a.au_id = t.au_id

AND a.contract = 1 LINQ コード authors

.Join(titleauthors,

a => new{a.au_id, key1 = a.contract},

t => new{t.au_id, key1 = (1 == 0 ? false : true)}, (a, t) => new{a, t})

.Select(x1 => new {

x1.a.au_id, x1.t.title_id });

TopPage

ファイル名 No50.linq

説明 No49.linq の 2 つ目の結合キーの左辺と右辺を入れ替える

T-SQL SELECT a.au_id, t.title_id

FROM authors AS a INNER JOIN titleauthor AS t ON a.au_id = t.au_id

AND 1 = a.contract LINQ コード authors

.Join(titleauthors,

a => new{a.au_id, key1 = a.contract},

t => new{t.au_id, key1 = (1 == 0 ? false : true)}, (a, t) => new{a, t})

.Select(x1 => new {

x1.a.au_id, x1.t.title_id });

(24)

TopPage

ファイル名 No50_2.linq

説明 No50.linq の 2 つ目の結合キーを WHEHE 句に移動する T-SQL SELECT a.au_id, t.title_id

FROM authors AS a INNER JOIN titleauthor AS t ON a.au_id = t.au_id

WHERE 1 = a.contract LINQ コード authors

.Join(titleauthors, a => a.au_id, t => t.au_id,

(a, t) => new{a, t})

.Where(x1 => (1 == 0 ? false : true) == x1.a.contract) .Select(x1 => new

{

x1.a.au_id, x1.t.title_id });

TopPage

ファイル名 No51.linq

説明 ビット型を WHERE 句で使用する

T-SQL SELECT a.au_id, t.title_id

FROM authors AS a INNER JOIN titleauthor AS t ON a.au_id = t.au_id

WHERE a.contract = 1 LINQ コード authors

.Join(titleauthors, a => a.au_id, t => t.au_id,

(a, t) => new{a, t})

.Where(x1 => x1.a.contract == (1 == 0 ? false : true)) .Select(x1 => new

{

x1.a.au_id, x1.t.title_id });

TopPage

ファイル名 No52.linq

説明 ビット型を選択リストで使用する

T-SQL SELECT a.au_id, a.contract, t.title_id

FROM authors AS a INNER JOIN titleauthor AS t

(25)

ON a.au_id = t.au_id AND a.state = 'UT' LINQ コード authors

.Join(titleauthors,

a => new{a.au_id, key1 = a.state}, t => new{t.au_id, key1 = "UT"}, (a, t) => new{a, t})

.Select(x1 => new {

x1.a.au_id, x1.a.contract, x1.t.title_id });

TopPage

ファイル名 No53.linq

説明 時間型を FROM 句で使用する

T-SQL SELECT t1.title_id, t2.au_id

FROM titles AS t1 INNER JOIN titleauthor AS t2 ON t1.title_id = t2.title_id

AND t1.pubdate > '2000-01-01' LINQ コード titles

.SelectMany(t2 => titleauthors, (t1, t2) => new{t1, t2})

.Where(x1 => x1.t1.title_id == x1.t2.title_id && x1.t1.pubdate >

DateTime.Parse("2000-01-01")) .Select(x1 => new

{

x1.t1.title_id, x1.t2.au_id });

TopPage

ファイル名 No54.linq

説明 時間型を WHERE 句で使用する

T-SQL SELECT t1.title_id, t2.au_id

FROM titles AS t1 INNER JOIN titleauthor AS t2 ON t1.title_id = t2.title_id

WHERE t1.pubdate > '2000-01-01' LINQ コード titles

.Join(titleauthors,

t1 => t1.title_id, t2 => t2.title_id, (t1, t2) => new{t1, t2})

.Where(x1 => x1.t1.pubdate > DateTime.Parse("2000-01-01")) .Select(x1 => new

(26)

{

x1.t1.title_id, x1.t2.au_id });

TopPage

ファイル名 No55_2.linq

説明 時間型を選択リストで使用する(1)

T-SQL SELECT t1.title_id, t1.pubdate, t2.au_id FROM titles AS t1 INNER JOIN titleauthor AS t2

ON t1.title_id = t2.title_id WHERE t2.au_ord = 3

LINQ コード titles

.Join(titleauthors,

t1 => t1.title_id, t2 => t2.title_id, (t1, t2) => new{t1, t2}) .Where(x1 => x1.t2.au_ord == 3) .Select(x1 => new

{

x1.t1.title_id, x1.t1.pubdate, x1.t2.au_id });

TopPage

ファイル名 No55_3.linq

説明 時間型を選択リストで使用する(2)

T-SQL SELECT t1.title_id, t1.pubdate, t2.au_id FROM titles AS t1 INNER JOIN titleauthor AS t2

ON t1.title_id = t2.title_id

AND t1.royalty = t2.au_ord * 10 LINQ コード titles

.Join(titleauthors,

t1 => new{t1.title_id, key1 = t1.royalty}, t2 => new{t2.title_id, key1 = t2.au_ord * 10}, (t1, t2) => new{t1, t2})

.Select(x1 => new {

x1.t1.title_id, x1.t1.pubdate, x1.t2.au_id });

TopPage

(27)

ファイル名 No55_5.linq

説明 時間型を選択リストで使用する(3)

T-SQL SELECT t1.title_id, t1.pubdate, t1.pubdate + 1 FROM titles AS t1 INNER JOIN titleauthor AS t2

ON t1.title_id = t2.title_id

AND t1.royalty = t2.au_ord * 10 LINQ コード titles

.Join(titleauthors,

t1 => new{t1.title_id, key1 = t1.royalty}, t2 => new{t2.title_id, key1 = t2.au_ord * 10}, (t1, t2) => new{t1, t2})

.Select(x1 => new {

x1.t1.title_id, x1.t1.pubdate,

root_alias_3 = x1.t1.pubdate + TimeSpan.FromDays((double)(1)) });

TopPage

ファイル名 No56_2.linq

説明 選択リストで 「リレーションエイリアス.*」を指定する

T-SQL SELECT t.*

FROM authors AS a INNER JOIN titleauthor AS t ON a.au_id = t.au_id

WHERE t.au_ord = 3 LINQ コード authors

.Join(titleauthors, a => a.au_id, t => t.au_id,

(a, t) => new{a, t}) .Where(x1 => x1.t.au_ord == 3) .Select(x1 => new

{

x1.t.au_id, x1.t.title_id, x1.t.au_ord, x1.t.royaltyper });

TopPage

ファイル名 No57_2.linq

説明 選択リストで 「テーブル名.*」を指定する

T-SQL SELECT titleauthor.*

FROM authors INNER JOIN titleauthor

ON authors.au_id = titleauthor.au_id

(28)

WHERE titleauthor.au_ord = 3 LINQ コード authors

.Join(titleauthors, a => a.au_id, t => t.au_id,

(a, t) => new{a, t}) .Where(x1 => x1.t.au_ord == 3) .Select(x1 => new

{

x1.t.au_id, x1.t.title_id, x1.t.au_ord, x1.t.royaltyper });

TopPage

ファイル名 No58_2.linq

説明 テーブルにエイリアスを付与しないでテーブル名を直接使用する

T-SQL SELECT titleauthor.*

FROM titles INNER JOIN titleauthor

ON titles.title_id = titleauthor.title_id WHERE titleauthor.au_ord = 3

LINQ コード titles

.Join(titleauthors, t => t.title_id, ti => ti.title_id, (t, ti) => new{t, ti}) .Where(x1 => x1.ti.au_ord == 3) .Select(x1 => new

{

x1.ti.au_id, x1.ti.title_id, x1.ti.au_ord, x1.ti.royaltyper });

TopPage

ファイル名 No59.linq

説明 ORDER BY 句を数値で指定する

T-SQL SELECT t1.title_id, t1.price,

(SELECT COUNT(t2.price) FROM titles AS t2

WHERE t2.price > t1.price) + 1 AS rank FROM titles AS t1

ORDER BY 3 LINQ コード titles

(29)

.Select(x1 => new {

x1.title_id, x1.price, rank = titles

.Where(x2 => x2.price > x1.price).Count(x2 => x2.price !=

null) + 1 })

.OrderBy(t => t.rank);

TopPage

ファイル名 No60.linq

説明 ORDER BY 句をカラム名で指定する(1)

T-SQL SELECT t1.title_id, t1.price,

(SELECT COUNT(t2.price) FROM titles AS t2

WHERE t2.price > t1.price) + 1 AS rank FROM titles AS t1

ORDER BY t1.title_id LINQ コード titles

.Select(x1 => new {

x1.title_id, x1.price, rank = titles

.Where(x2 => x2.price > x1.price).Count(x2 => x2.price !=

null) + 1 })

.OrderBy(t => t.title_id);

TopPage

ファイル名 No61.linq

説明 ORDER BY 句をカラム名で指定する(2)

T-SQL SELECT t1.title_id, t1.price,

(SELECT COUNT(t2.price) FROM titles AS t2

WHERE t2.price > t1.price) + 1 AS rank FROM titles as t1

ORDER BY title_id LINQ コード titles

.Select(x1 => new {

x1.title_id, x1.price, rank = titles

.Where(x2 => x2.price > x1.price).Count(x2 => x2.price !=

(30)

null) + 1 })

.OrderBy(t => t.title_id);

TopPage

ファイル名 No62.linq

説明 ORDER BY 句で選択リストに含まれないカラム名を指定する(1)

T-SQL SELECT t1.title_id, t1.price,

(SELECT COUNT(t2.price) FROM titles AS t2

WHERE t2.price > t1.price) + 1 AS rank FROM titles AS t1

ORDER BY t1.pub_id LINQ コード titles

.OrderBy(x1 => x1.pub_id) .Select(x1 => new

{

x1.title_id, x1.price, rank = titles

.Where(x2 => x2.price > x1.price).Count(x2 => x2.price !=

null) + 1 });

TopPage

ファイル名 No63.linq

説明 ORDER BY 句で選択リストに含まれないカラム名を指定する(2)

T-SQL SELECT t1.title_id, t1.price,

(SELECT COUNT(t2.price) FROM titles AS t2

WHERE t2.price > t1.price) + 1 AS rank FROM titles as t1

ORDER BY pub_id LINQ コード titles

.OrderBy(x1 => x1.pub_id) .Select(x1 => new

{

x1.title_id, x1.price, rank = titles

.Where(x2 => x2.price > x1.price).Count(x2 => x2.price !=

null) + 1 });

TopPage

(31)

ファイル名 No75.linq

説明 集合演算に ORDER BY 句を使用する

T-SQL SELECT au_id, title_id FROM titleauthor WHERE au_ord = 1 UNION

SELECT au_id, title_id FROM titleauthor WHERE au_ord <> 1 ORDER BY title_id LINQ コード titleauthors

.Where(x1 => x1.au_ord == 1) .Select(x1 => new

{

x1.au_id, x1.title_id })

.Union(titleauthors

.Where(x2 => x2.au_ord != 1) .Select(x2 => new

{

x2.au_id, x2.title_id }))

.OrderBy(t => t.title_id);

TopPage

参照

関連したドキュメント

論証 9‐3 テキスト第 11 章第8節参照 自己株式処分差益について,以下の問いに答えなさい。 ①

4 第Ⅰ部 論考編 女真語と女真文字 吉池孝一

法的にみる セクシュアルハラスメント 刑法上の責任 ・ 性的な言動が身体的接触を 伴う場合  →強姦や強制わいせつ

次のセクションでは、 Real-Time Aggregation ( RAG )アダプタの設定に使用するコンフィギュレー ション ファイル( ragadapter.conf )および関連

接着 側 粘着剤面 3M TM Scotchtint TM Window Film 10 Scotchtint TM Window Film 11-22 11 12 13 14 15 17 18 16 19 20 21 22

[r]

   目的でも書いたようにカップラー メンはたくさんの種類があり、味も

[r]