0

単一の値 (「ABC」など) を含む単純な文字列フィールドを持つ SQL テーブル、またはパイプ (「|」) 文字で区切られたリスト (「ABC|EDF|GHI」など) を含む SQL テーブルがあります。例えば)。

SharePoint リストがあり、SP リストのすべての値が SQL テーブルに存在することを確認するためにクロス チェックしたい場合、SQL フィールドに値が 1 つしかないと仮定すると、簡単に実行できます。

var listitems = from SPListItem item in spList.Items 
                where item[myfieldname].Equals(valueImChecking) 
                select item;

「|」で区切られた値のリストが含まれていると仮定して、同様のアプローチを使用して同じ SQL フィールドをチェックするにはどうすればよいですか? このフィールドの値が「ABC|EDF|GHI」で、たとえば「GHI」が含まれているかどうかを確認している場合、LINQ でクエリを作成するにはどうすればよいですか?

ティア、-トニー。

4

2 に答える 2

0

値を分割して別のテーブルに書き込むことをお勧めします。後で検索したい場合、同じフィールドに複数の値を格納するのは良い設計ではないと思います。

データベースを変更したくない場合は、shahkalpesh の回答を使用できます。ただし、一部の値に他の値が含まれている場合 ( WXYZcontainsなどXYZ)、可能な候補のリストのみが表示されます。結果をメモリ内で確認する必要があります。

// this filters for possible candidates
var candidates = from item in spList.Items 
                 where item[myfieldname].ToString().Contains(valueImChecking) 
                 select item;

// this filters the result using ling-to-objects
var listItems = from candidate in candidates.AsEnumerable()
                where candidate[myfieldname].ToString().Split('|').Contains(valueImChecking)
                select candidate;

AsEnumerableLinq-To-Objects へのスイッチの使用。LINQ to SQL は Split をサポートしていないため、これが必要です。

最初のクエリ(shahkalpeshの回答から取得したもの)を使用して、事前フィルタリングを行うことができます。
Items テーブルが小さい場合は、すべてをメモリにロードし、ling-to-objects (2 番目のクエリのみを使用) でチェックすることもお勧めします。

于 2013-07-22T16:42:47.617 に答える