如何做一个不变的.Contains(myQuery)与Linq对象?

Pur*_*ome 1 .net linq linq-to-objects

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


我有一个IList<Foo>有很多属性的,但有一个属性public string MyText { get; set; }

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

WHERE MyText LIKE '%searchQuery%' < - 工作但不尽如人意

要么

WHERE CONTAINS(MyText, 'searchQuery') < - 使用FTS.

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

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

建议?

SLa*_*aks 8

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

String.Contains不支持不区分大小写的搜索.相反,你应该这样打电话IndexOf:

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

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