nvarchar
文字列 ( ) 列に書式設定された値を含むテーブルがあるとします。これらの値は、const 記号 (セミコロン;
) で区切られた文字列であると想定されています。例えば、
12;0;5;dog //four values separated by a semi-colon
また
053 //if there is only one value, no semi-colon at the end
区切り記号は常に区切り記号であり、値の一部にすることはできません。
そのテーブルに、指定された項目の少なくとも 1 つを含む値のリストがその列にある行が既に存在するかどうかを確認する必要があります。言い換えれば、私は値のリストを持っています:
List<string> list = new List<string>() { "somevalue1", "somevalue2" };
セパレーター:
string separator = ";";
そして、これを行う linq-to-sql クエリを作成する必要があります。
select ... from sometable
where Value='somevalue1' or Value like 'somevalue1;%' or
Value like '%;somevalue1' or Value like '%;somevalue1;%'
or Value='somevalue2' or Value like 'somevalue2;%' or
Value like '%;somevalue2' or Value like '%;somevalue2;%'
検索された値のいずれかに他の値が含まれている可能性があることに注意してください。つまり、正確5
に を検索している可能性がありますが、一部の行には が含まれている可能性があります1;15;55
。そのような行は一致してはなりません。while...;5;...
または just 5
、 または5;...
、 または...;5
が一致します。
linq-to sql を使用して、次の種類のクエリを実行する方法を知っています。
select ... from sometable where (... or ... or ...) and (... or ...) ...
あれは
IQueryable<SomeTable> query = dc.SomeTable;
foreach (string l in list)
{
string s = l;
query = query.Where(b => b.Value.StartsWith(s + separator) ||
b.Value.EndsWith(separator + s) ||
b.Value.Contains(separator + s + separator) ||
b.Value.Equals(s));
}
if (query.Any()) {/*...*/}
明らかに、結果のSQLクエリでWhere
ステートメントが結合されますが、どこでも必要です。AND
OR
C# コード内で必要なクエリを取得する方法はありますか? または、手書きのクエリとDataContext.ExecuteQuery Methodを使用してこれを行う唯一の方法ですか?