Используя Foreach в iQueryable List, найдите значение, если во втором списке

1

У меня есть коллекция iQueryable, созданная с запросом, как показано ниже -

var Results = DataClass.Links.OrderBy(mySel => mySel.Description)
                             .Where(mySel =>                                     mySel.Report_Id.Equals(NumID)                                          
                             new Sections
                             {
                                SectID = mySel.Report_Section.SectID,
                                SectionDesn = mySel.Report_Section.ReportSectionDescription,
                                ReportPageTitle = mySel.tbl_Report.ReportPageTitle,                                                
                                MyUrl = mySel.Link_Url
                             }).Distinct();

У меня также есть второй список типа List<string> под названием LookForMe, определенный как

var LookForMe = new List<string> { "increase", "abc", "tuesday", "another" };

Теперь я пытаюсь пропустить каждый элемент в моей коллекции Results, и если item.URL содержит одно из значений, найденных в моем списке LookForMe, и если да, тогда сделайте что-нибудь.

foreach (var item in Results)
{
   if (item.URL *contains any of the values in my LookFormE list*)
   {
      // then do something
   }
}

Я не уверен, как написать оператор if, чтобы узнать, содержит ли текущее итерированное значение любое из значений в списке LookForMe. Любые идеи, которые помогут мне на правильном пути? Спасибо за ваше время.

Теги:
linq
list
foreach
collections

2 ответа

1
Лучший ответ

Вы можете попробовать следующее:

foreach (var item in Results)
{
    if (LookForMe.Any(x=>item.URL.Contains(x)) 
    {
        // then do something
    }
}

Используя метод расширения Any, вы смотрите, существует ли какой-либо из миров в LookForMe, который включен в item.URL. Если это так, он возвращает true. В противном случае возвращается false.

  • 0
    Спасибо! Отлично.
  • 0
    @DysonGuy, добро пожаловать, чувак!
Показать ещё 1 комментарий
1

Ваш чек должен быть:

if(LookForMe.Contains(item.URL))

Это вернет true, если item.URL присутствует в списке LookForMe.

Но если вы пытаетесь сравнить любую часть URL соответствующую любому элементу в вашем списке, тогда ваша проверка должна быть:

if(LookForMe.Any(r=> item.URL.Contains(r)))
  • 0
    Если вы собираетесь использовать подход «Содержит коллекцию», особенно если в коллекции много записей, было бы лучше вызвать ToLookup, geekswithblogs.net/BlackRabbitCoder/archive/2011/03/24/… , при определении LookForMe генерирует «индексированный» поиск вместо обычного сканирования, которое происходит при вызове Contains. Затем вы проверяете результат поиска на нуль, чтобы проверить существование.
  • 0
    Ценю оба комментария. Спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню