LINQの便利さに感動したのでその時のメモ
環境
- Visual Basic 2008 Express
- .net framework 3.5
- MS-SQL 2008 R2
大人の都合で古めの環境w
メリット
- SQLをコード内に含まないので不要なバグが混入しにくい
- よって、コードの統一性が保たれる
- DBNullとおさらばできる??
- マッピング情報をプロジェクト内に定義するため、VSのコード補完機能の恩恵がある。
- なにより、コードを簡潔に書けるので使っていて楽しい <-- ここ重要
デメリット
- Expressであると構成を自力で作成する手間がある
- なれていないと、初期の学習コストがかかる(かかっている)
前準備
- Visual Studioでプロジェクトを作成する
- 作成したプロジェクトに"LINQ to SQL"を新規作成で追加
- ↑で作成した*.dbmlに自力でスキーマやスキーマの関連性を作成 ※Express以外であれば、データベースエクスプローラでDrag&Dropで作成できる、らしい。
サンプルコード
LINQ to SQL (クエリ構文)
基本的な形
※以下をベースに進める
Dim query = From row In hogeTable
Where _
row.column1.StartsWith(_property.value1)) And _
row.column2.StartsWith(_property.value2)) _
Select row
n行目からx行を取得する場合。
ちなみに下のように指定すると実際のSQLにはROW_NUMBER()が追加されている。Skilp(0)だと無理だった。
Dim query = From row In hogeTable
Where _
row.column1.StartsWith(_property.value1)) And _
row.column2.StartsWith(_property.value2)) _
Skip (1) Take (2)
Select row
業務アプリとかだとありそうな期間指定による検索の場合。
注意点は比較対象のオブジェクトをお互いに合わせておくこと。 今回であればDate型で統一している。
Dim query = From row In hogeTable
Where _
row.column1.StartsWith(_property.value1)) And _
row.column2.StartsWith(_property.value2)) _
row.Column3.Date >= _property.value3.Date) And _
row.Column4.Date <= _property.value4.Date) _
Select row
動的な検索条件を指定する場合。
複数の条件を指定する時に、value1が無い時はそれを含めない。けどvalue1が有る時はそれを含めたいという場合のサンプル。
Dim query = From row In hogeTable
Where _
(String.IsNullOrEmpty(_property.value1) Or row.column1.StartsWith(_property.value1)) And _
(String.IsNullOrEmpty(_property.value2) Or row.column2.StartsWith(_property.value2)) And _
((_property.value3 = Nothing) Or row.column3.Date >= _property.value3.Date)_
Select row
結合する場合。
特に考える事なく可能。
Dim query = From row1 In hogeTable1
Join row2 In hogeTable2 On row2.column1 Equals row1.column1
Where _
(String.IsNullOrEmpty(_property.value1) Or row.column1.StartsWith(_property.value1)) And _
(String.IsNullOrEmpty(_property.value2) Or row.column2.StartsWith(_property.value2)) And _
((_property.value3 = Nothing) Or row.column3.Date >= _property.value3.Date)_
Select row
LINQ to Object
ある値からある値の範囲で奇数もしくは偶数の数値リストを作成
適用しそうな状況としては、DataGridViewの背景色を行単位で交互に変更する時など。
DataGridViewのプロパティで対応できる事が解ったので、今の所用途が不明。。。
## 偶数
Dim list = Enumerable.Range( _
0, _
10).Where( _
Function(n) n Mod 2 = 0 _
).ToList
## 奇数
Dim list = Enumerable.Range( _
0, _
10).Where( _
Function(n) n Mod 2 = 1 _
).ToList
参考資料
Author And Source
この問題について(LINQの便利さに感動したのでその時のメモ), 我々は、より多くの情報をここで見つけました https://qiita.com/hondasports8/items/7793f3d31dafe9cf49ba著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .