【问题标题】:Finding matches that contain certain text in properties using LINQ使用 LINQ 在属性中查找包含特定文本的匹配项
【发布时间】:2013-05-21 18:56:06
【问题描述】:

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

我错过了什么?

【问题讨论】:

  • 除了顺序不同,这两个应该返回相同的项目......
  • 但第二个总是返回所有项目
  • 那么这里发生了其他事情......
  • 你是对的,因为现在第一个也返回所有项目..,以前没问题..正在检查

标签: c# linq collections


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢。我试过了,但由于某种原因它没有返回匹配项。使用foreach 再次检查它并且有效...
  • @PutraKg 您如何使用结果? LINQ 已延迟执行 - 尝试将 .ToList() 添加到末尾,因为这会强制它立即完全执行。
猜你喜欢
  • 2017-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-07
  • 2016-07-02
  • 1970-01-01
  • 2015-09-15
  • 1970-01-01
相关资源
最近更新 更多