2014-02-11 6 views
2

У меня есть список строк под названием «рынки». Я хотел бы отфильтровать рынки до двух строк: «Сан-Франциско» и «Сан-Хосе», просто сравнивая с подстрокой (т. Е .: «Sa», «San», «san») вместо точной строки. Как вы можете это сделать?Как сравнить элементы внутри списка с подстрокой?

Вот что у меня есть, и оно принимает только точные строки.

List<string> markets = getAllMarkets(); 

var marketList = new List<string>(); 
marketList.Add("San"); 

markets = markets.Where(marketList.Contains); 

С кодом выше, у рынков будет 0 элементов, так как нет рынка, который называется «Сан».

ответ

7

Чтобы соответствовать что-нибудь в marketList:

markets.Where(i => marketList.Any(marketListItem => 
    i.ToLower().Contains(marketListItem.ToLower())); 
+2

У меня такое чувство, что он хочет добавить к нему еще один уровень (поиск каждой записи в 'marketList', а не только« сан »). –

+0

Я могу добавить это в. Неправильный вопрос. –

+0

Jeroen верен. Вместо того, чтобы передавать в String внутри Contains(), я использую список строк. –

1
List<string> markets = getAllMarkets(); 

var marketList = new List<string>(); 
marketList.Add("San"); 

markets = markets.Where(marketList.Contains); 

for(int i = 0; i < marketList.Count; i++) 
{ 

    for(int a = 0; a < marketList.Count; a++) 
    { 
     markets[a] = markets[i].Where(marketList.Contains); 
    } 
} 

Возможно сравнение обоих списков с для цикла? Я думаю, что мне не хватало бы смысла в том, что вы пытаетесь сделать здесь.

+0

, чтобы сделать регистр нечувствительным к регистру, преобразовать текст в список в верхний или нижний регистр и затем сравните. – Ronnie

+0

Вы можете обратиться к разговору, который у нас есть. Я ищу чисто-LINQ-решение, поскольку оно сохраняет строки кода. Цените свой ответ! –

+0

без проблем. Благодаря! – Ronnie

Смежные вопросы