【问题标题】:How can do an invariant .Contains(myQuery) with Linq to Objects?如何用 Linq to Objects 做一个不变的 .Contains(myQuery)?
【发布时间】:2010-10-06 20:11:38
【问题描述】:

我正在尝试使用 linq 过滤对象列表。当我按Contains(someSearchQuery) 过滤时,它就像是区分大小写的......这意味着我错过了一些结果。


我有一个IList<Foo>,它有许多属性,但其中一个是public string MyText { get; set; }

现在,我正在尝试返回 Foo 的 IQueryable,其中 MyText 属性包含 search query - 但如果这是一个 Sql 语句,它会是......

WHERE MyText LIKE '%searchQuery%'

WHERE CONTAINS(MyText, 'searchQuery')

我不知道该怎么做,因为当我执行以下查询时,它就像是在区分大小写

var query = from q in myFooList.AsQueryable().Where(x => x.MyText.Contains(searchQuery));

建议?

【问题讨论】:

  • searchQuery 和 MyText 上的 ToUpper/ToLower 可以解决问题。
  • @klausbyskov 最初我也这么认为.. 是的。确实有效..但感觉它只是不正确 / 闻起来不对或其他什么......

标签: .net linq linq-to-objects


【解决方案1】:

您问的是string.Contains 方法,而不是LINQ。

String.Contains 不支持不区分大小写的搜索。相反,您应该调用IndexOf,如下所示:

var query = from q in myFooList
     .Where(x => x.MyText.IndexOf(searchQuery, StringComparison.OrdinalIgnoreCase) >= 0);

请注意,由于您使用的是 LINQ-to-Objects,因此您(可能)不需要AsQueryable

【讨论】:

  • 那个男人!效果很好:) 出于兴趣,这也适用于 Linq-To-Sql/Entities 吗?
  • 我不知道,但我怀疑不会。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-03
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
  • 1970-01-01
  • 2019-03-20
  • 2011-10-22
相关资源
最近更新 更多