[英]LinQ WHERE string.Contains or string.IndexOf?
我需要寫一些與以下結果相同的東西:
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() ) );
換句話說,我需要從名稱包含一些特定字符串的集合中檢索所有對象。
var result = collection.Where(item => stringsToCheck.Any(stringToCheck =>
item.Name.Contains(stringToCheck)));
用英語閱讀這是:給我集合中的所有項目,其中所有要檢查的字符串中的一個是集合中字符串的子字符串。
如果要測試o.Name
是否包含stringToCheck
則:
var result = collection.Where( o => stringsToCheck.Any(a => o.Name.Contains(a)));
如果您只需要測試相等性,則:
var result = collection.Where( o => stringsToCheck.Contains(o.Name));
注意:如果您需要應用案例規范化,則應相應地應用ToLower()
。
您正在檢查集合元素o.ToLower()
我假設您必須檢查其名稱o.Name.ToLower()
。
如果你想檢查是否o.Name
包含一些string
從stringsToCheck
,我會建議使用LinqKit並建立與查詢PredicateBuilder
。
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.