5

次と同じ結果が得られるようなものを書く必要があります。

var result = collection.Where( o => o.Name.IndexOf( "some_string2" ) != -1 || o.Name.IndexOf( "some_string_2" ) != -1 || o.Name.IndexOf( "some_string3" ) != -1 )

チェックする文字列(some_string_1、2、および3)の量と値が不明な場合(DBから取得)、より一般的なもの...

次のことを試しましたが、失敗しました...

var stringsToCheck = someCommaSeparatedStrings.ToLower().Split( ',' ).ToList();
var result = collection.Where( o => stringsToCheck.Contains( o.ToLower() ) );

つまり、名前に特定の文字列が含まれているコレクションからすべてのオブジェクトを取得する必要があります。

4

4 に答える 4

32
var result = collection.Where(item => stringsToCheck.Any(stringToCheck => 
    item.Name.Contains(stringToCheck)));

英語で読むと、これは次のとおりです。コレクション内のすべてのアイテムを教えてください。ここで、それらの1つをチェックするすべての文字列のうち、コレクション内の文字列のサブ文字列です。

于 2013-01-15T21:13:07.537 に答える
5

o.Namethenが含まれているかどうかをテストするstringToCheck場合:

var result = collection.Where( o => stringsToCheck.Any(a => o.Name.Contains(a)));

同等性をテストするだけでよい場合は、次のようにします。

var result = collection.Where( o => stringsToCheck.Contains(o.Name));

注:大文字と小文字の正規化を適用する必要がある場合は、それに応じて適用する必要がありますToLower()

于 2013-01-15T21:37:07.263 に答える
1

コレクション要素をチェックしています。o.ToLower()名前をチェックする必要があると思いますo.Name.ToLower()

于 2013-01-15T21:14:00.303 に答える
0

からのo.Name一部が含まれているかどうかを確認する場合は、 LinqKitを使用し、を使用してクエリを作成することをお勧めします。stringstringsToCheckPredicateBuilder

var predicate = PredicateBuilder.False<TypeOfYourObject>();
var stringsToCheck = someCommaSeparatedStrings.ToLower().Split( ',' ).ToList();

foreach(var str in stringsToCheck)
{
     var tmp = str; 
     predicate = predicate.Or(o=> o.Name.IndexOf(tmp) != -1);
} 
resultQuery = collection.Where(predicate); 
于 2013-01-15T21:26:21.010 に答える