開発環境
Windows10
VisualStudio 2017
VB.NET
.Net Framework 4.6.2
前提・実現したいこと
LINQを使い、データテーブルから条件に合致するデータを抽出したいと考えています。
例として下のテストデータを例に詳細を書きます。
KEY(STRING) | CODE1(STRING) | CODE2(STRING) | VALUE(STRING) |
---|---|---|---|
1 | 001 | 0 | テスト1-1 |
2 | 001 | 1 | テスト1-2 |
3 | 002 | 0 | テスト2-1 |
4 | 002 | 1 | テスト2-2 |
5 | 003 | 0 | テスト3-1 |
6 | 003 | 1 | テスト3-2 |
上記のようなデータから、CODE1とCODE2を条件にデータの抽出を行います。
具体的な抽出条件は下記のとおりです。
・CODE1が「001」の場合:
CODE1が「001」のデータを取得
・CODE1が「002」の場合:
CODE1が「002」かつ、CODE2が「0」のデータを取得
・CODE1が「003」の場合:
CODE1が「003」かつ、CODE2が「0以上」のデータを取得
プログラム
VB.NET
1'検索条件となるCODE1 2'searchConditionの中身は動的に変わることを想定 3'"001"だけのこともあれば"001,002,003"の場合もある 4Dim searchCondition() As String = New String() {"001", "003"} 5Dim dt As Datatable = 前提・実現したいことに記載したデータ 6 7Dim linq = From row In dt.AsEnumerable 8 Where 1 = 1 9 10For Each str As String In searchCondition 11 Select Case str 12 Case "001" 13 linq = linq.Where(Function(row) row("CODE1") = str) 14 Case "002" 15 linq = linq.Where(Function(row) row("CODE1") = str And row("CODE2") = 0) 16 Case "003" 17 linq = linq.Where(Function(row) row("CODE1") = str And row("CODE2") >= 0) 18Next 19
期待値・実行結果
■期待値
KEY=1、KEY=2、KEY=6のデータを抽出したい
(row("CODE1") = str Or (linq.Where(Function(row) row("CODE1") = str And row("CODE2") >= 0))
■実行結果
CODE1=001のWhere句とCODE1=003のWhere句がAnd条件となってしまい抽出結果0件
(row("CODE1") = str And (linq.Where(Function(row) row("CODE1") = str And row("CODE2") >= 0))
複数のWhere句が作られた場合に、それらをOr条件で実行したいと考えています。
回答1件
あなたの回答
tips
プレビュー