C# 使用LINQ查找属性中包含特定文本的匹配项

C# 使用LINQ查找属性中包含特定文本的匹配项,c#,linq,collections,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.Whe

我正在尝试将以下代码转换为
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)));

我遗漏了什么?

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

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

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

除了顺序不同之外,这两个应该返回相同的项目…但是第二个总是返回所有项目。在这里发生了其他事情…你是对的,因为现在第一个也返回所有项目..,以前是可以的。。我在查汉克斯。我试过了,但由于某种原因,它没有返回匹配项。使用
foreach
再次检查,结果正常…@PutraKg您如何使用结果?LINQ已延迟执行-请尝试在末尾添加
.ToList()
,因为这会迫使它立即完全执行。