在iQueryable List上使用Foreach在第二个列表中查找值

时间:2014-05-23 15:27:51

标签: c# linq list collections foreach

我有一个使用查询创建的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列表中的任何值。有什么想法让我走上正轨吗?谢谢你的时间。

2 个答案:

答案 0 :(得分:1)

您的支票应该是:

if(LookForMe.Contains(item.URL))

如果列表item.URL中存在LookForMe,则返回true。

但是,如果您要比较列表中任何项目URL的{​​{1}}的任何部分,那么您的检查应为:

if(LookForMe.Any(r=> item.URL.Contains(r)))

答案 1 :(得分:1)

你可以尝试这个:

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

使用Any扩展方法,您正在查看LookForMe中是否存在item.URL中包含的任何世界。如果是,则返回true。否则,它返回false。