●LINQ を試してみる
SQL文と比較するとこんな感じ
LINQ to DataSet はDataSet は DataTable に対して集計やフィルタ、ソートがSQLライクな構文で実行できます。
これまでも DataView クラスの Sortプロパティ、RowFileterプロパティ、Computeメソッドを使えばこれらと同等のものは実装できますが、SQL文が理解できるならこの方が見やすいかもしれません。
(3)のようなパターンではとくに .NET Framework クラス関数が使用できるのでだんぜんわかりやすいです。
「なぜSQL文と記述の順番が違うの?」と思う人もいるかと思いますが、MSの人曰く、
「インテリセンスを表示させるのに、親オブジェクトとなるものから記述しないとコンパイラが解釈できないから」とのことだそうです。
言われてみればそうですね…って3ヶ月前Tech・Edで納得してました。
LINQ クエリ | SQL ステートメント | ||
---|---|---|---|
(1) | Dim query = From MSHAIN In SHAIN_MST.AsEnumerable, MTSHAIN In SHAIN_EXT.AsEnumerable _
Where MSHAIN.Field(Of String)("SHAIN_CD") = MTSHAIN.Field(Of String)("SHAIN_CD") _ AndAlso MSHAIN.Field(Of String)("SHAIN_CD") = "999" _ Select New With _ { _ .SHAINCD = MSHAIN.Field(Of String)("SHAIN_CD"), _ .SHAINNM = MSHAIN.Field(Of String)("SHAIN_NM"), _ .BUMONCD = MTSHAIN.Field(Of String)("BUMON_CD") _ } |
SELECT
M_SHAIN.SHAIN_CD AS SHAINCD, SHAIN_MST.SHAIN_NM AS SHAINNM, MT_SHAIN.BUMON_CD AS BUMONCD FROM SHAIN_MST MSHAIN, SHAIN_EXT MTSHAIN WHERE MSHAIN.SHAIN_CD = MTSHAIN.SHAIN_CD AND MSHAIN.SHAIN_CD = '999' |
|
(2) | Dim query2 = From MSHAIN In M_SHAIN.AsEnumerable Select MSHAIN | SELECT * FROM SHAIN_MST | |
(3) | Dim query3 = From MSHAIN In SHAIN_MST.AsEnumerable _
Where MSHAIN.Field(Of DateTime)("BIRTHDAY") _ .ToString("yyyyMM").Equals("200803") _ Select MSHAIN |
SELECT * FROM M_SHAIN
WHERE SUBSTRING(CONVERT(VARCHAR(8),BIRTHDAY,112),1,6)='200803' |
LINQ to DataSet はDataSet は DataTable に対して集計やフィルタ、ソートがSQLライクな構文で実行できます。
これまでも DataView クラスの Sortプロパティ、RowFileterプロパティ、Computeメソッドを使えばこれらと同等のものは実装できますが、SQL文が理解できるならこの方が見やすいかもしれません。
(3)のようなパターンではとくに .NET Framework クラス関数が使用できるのでだんぜんわかりやすいです。
「なぜSQL文と記述の順番が違うの?」と思う人もいるかと思いますが、MSの人曰く、
「インテリセンスを表示させるのに、親オブジェクトとなるものから記述しないとコンパイラが解釈できないから」とのことだそうです。
言われてみればそうですね…って3ヶ月前Tech・Edで納得してました。