LINQ: найдите список строк в списке объектов [duplicate]

Для localhost / wampserver 3 мы можем установить sql-mode = user_mode, чтобы удалить эту ошибку:

click on wamp icon -> MySql -> MySql Setting -> sql-mode -> user_mode

затем перезапустить wamp или apache

1
задан Seb 15 January 2013 в 23:09
поделиться

4 ответа

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

Читайте на английском языке: дайте мне все элементы в коллекции, где из всех строк для проверки одного из них есть подстрока строки в коллекции.

17
ответ дан Servy 27 August 2018 в 08:02
поделиться

Если вы хотите проверить, содержит ли 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() следует применять соответственно.

3
ответ дан Chamila Chulatunga 27 August 2018 в 08:02
поделиться

Вы проверяете элемент коллекции o.ToLower(), я предполагаю, что вы должны проверить его имя o.Name.ToLower().

1
ответ дан Hamlet Hakobyan 27 August 2018 в 08:02
поделиться

Если вы хотите проверить, содержит ли 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); 
0
ответ дан mipe34 27 August 2018 в 08:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: