私は、文字列のリスト内の文字列のいずれかが含まれているDB内の文字列であることを確認するlinqクエリを構築しています。
何かのようなもの。
query = query.Where(x => x.tags
.Contains(--any of the items in my list of strings--));
また、リスト内のアイテムがいくつ一致したかを知りたいです。
任意の助けをいただければ幸いです。
更新:タグはリストではなく文字列であることを述べたはずです。そして、クエリが実際に実行される前に、タグに関連しない場所をさらに2つ追加します。これは、エンティティフレームワークに対して実行されています。
編集:この答えは、tags
が文字列のコレクションであると仮定しました...
あなたが望むかもしれないように聞こえます:
var list = new List<string> { ... };
var query = query.Where(x => x.tags.Any(tag => list.Contains(tag));
または:
var list = new List<string> { ... };
var query = query.Where(x => x.tags.Intersect(list).Any());
(これがLINQ to SQLまたはEFを使用している場合、1つは動作するが、もう1つは動作しないことがあります。LINQto Objectsだけで、両方が動作するはずです。)
カウントを取得するには、次のようなものが必要です。
var result = query.Select(x => new { x, count = x.tags.Count(tag => list.Contains(tag)) })
.Where(pair => pair.count != 0);
result
の各要素は、x
(アイテム)とcount
(一致するタグの数)のペアです。
以前にこのようなことをしたことがあります:
var myList = new List<string>();
myList.Add("One");
myList.Add("Two");
var matches = query.Where(x => myList.Any(y => x.tags.Contains(y)));
このような:
List<string> list = new List<string>();
list.Add("One");
list.Add("Two");
var result = query.Where(x => list.Contains(x.tags));
Jon Skeetの答えが正しい場合、x.tagsが文字列またはリストであるかどうか、あなたの質問からはよくわかりません。 x.tagsは文字列の文字列ですが、正しく理解できれば。その場合の解決策は次のとおりです。
list.Any(x => x.tags.IndexOf(x) > -1)
それらを数えるために
list.Count(x => x.tags.IndexOf(x) > -1)