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()
,因为这会迫使它立即完全执行。