意外とわからないLinq⇔SQL構文

よくぼけてわすれるから記録しておく。

業務システムの人あるあるの、SQL使えるけど言語の新しい機能使えないって人向けかも。しかもSQL記法の情報が少ない気がする。

 

SELECT hoge, huga, mogera FROM TEST_TABLE ⇒ var linq = from rows in test_teble select...???????

最初本気でわからなくて、調べてみたけどなかなか出なかった。まじでくそ

 

基本構文

var linq = from result in List<Class> select result

読み解くと、fromはお決まりの宣言でresult in List<Class>はforeach文で展開するのと同じ。ただし、型宣言はなしで名前だけ付ける感じ。ジェネリクスあるからクラスは自動判定。

select resultで展開されたものを取得する宣言みたいのをする。

 

メソッド式はよくわかりません。

これで全件取得。

SELECT * FROM [TABLE_NAME] と同じ感じ。

リストの中身全部回るだけなのであんまり意味がない。

 

WHERE条件指定

var linq = from res in List<Class> where res.hoge == "テスト" select res

Linqでもwhere句はある。

SELECT * FROM [TABLE_NAME]  WHERE HOGE = 'テスト'

と同じ。複数条件にも対応している。

 

選択取得

var gomi = from res in table select new {res.hoge = hoge; res.mogera = mogera }

これがわからな過ぎて仕事中にぶちきれてた、助けてくれたのはStackOverflowだった。もしかしたらnewの構文事故ってるかも。

SELECT HOGE, MOGERA FROM [TABLE_NAME]

と同じ。そもそもそんなことできるのかよ知らなかった。

 

JOIN

調べたほうがはやい。そして結合するならびゅーとかストアドプロシージャなりPL/SQLでまとめてからプログラムに投げたほうがいい場合があるので要検討。

分担の仕方がわからないならDB側に任せるのがよし。

 

DISTINCT(重複除去)

var linq = (from res in table select new {res.hoge = hoge}).Distinct()

SELECT DISTINCT HOGE FROM [TABLE_NAME]

と同じ。

DISTINCTはメソッド式で呼ぶしかない。まあ別に対してこまらない。

 

GROUP BY

調べたらでる。ただでさえ使うとめんどくさいこれをC#で・・・。

 

構文のーちぇっくだけどいっか。