簡體   English   中英

LinQ WHERE string.Contains 還是 string.IndexOf?

[英]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包含一些stringstringsToCheck ,我會建議使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM