使用LINQ查找包含属性中某些文本的匹配项

时间:2013-05-21 18:56:07

标签: c# linq collections

我正在尝试将以下代码转换为LINQ

foreach (var item in pageHistorycol)
    {
        if (item.PageTitle.Contains(text) || item.PageURI.Contains(text))
        {
            tempHistory.Insert(0, item);
        }
    }

以下内容将返回所有项目而非匹配项

var matches = pageHistorycol.Where(item => 
    (item.PageTitle.Contains(text) || item.PageURI.Contains(text)));

我错过了什么?

1 个答案:

答案 0 :(得分:0)

您显示的两个语句应返回相同的项目。如果第二个返回所有项目,则foreach循环也应将所有项目添加到tempHistory

主要区别在于您的foreach循环将以与LINQ查询相反的顺序返回项目。如果匹配顺序很重要,您可以使用以下命令获取相同顺序的项目:

var matches = pageHistorycol
     .Where(item => item.PageTitle.Contains(text) || item.PageURI.Contains(text))
     .Reverse();
相关问题