【发布时间】:2015-08-08 10:56:29
【问题描述】:
我正在尝试在 Linq 查询中的字符串数组上使用 Array.Contains:
var otherMatchingDevices = from d in selectedDevices
from c in mldb.Companies
where d.CompanyID == c.CompanyID && c.Deleted == 0
where searchTerms.Contains(d.Name.ToString(), StringComparer.CurrentCultureIgnoreCase) || searchTerms.Contains(c.CompanyName.ToString(), StringComparer.CurrentCultureIgnoreCase)
select d;
当查询被评估时,它会因“用于查询运算符'包含'的不支持的重载而崩溃。
我使用 StringComparer 测试了这段代码,它工作正常并打印出“fOO”:
string[] sList = { "fOO", "bar" };
string[] array = { "foo" };
List<string> stringlist = sList.ToList();
var qry = from s in stringlist
where array.Contains(s, StringComparer.CurrentCultureIgnoreCase)
select s;
if (qry.Count() > 0) Console.WriteLine(qry.First().ToString());
谁能告诉我如何在 Linq 查询中使用不区分大小写的 Array.Contains?我不想转换原始字符串 ToUpper() 或 ToLower(),因为它很昂贵并且会更改原始数据。
【问题讨论】:
-
您使用的是 LINQ2SQL 还是 LINQ2Entities?如果是这样,那就是它不被支持的原因。
-
我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
-
@MichaelDunlap 使用 Linq to SQL 类。
-
ToUpper可能没那么贵,你为什么这么认为? -
@Magnus 每次我们调用 ToUpper() 时,它都会创建一个由 GC 创建和管理的临时字符串,这需要更多时间和更多内存。我也讨厌从数据库中的原始状态更改原始源数据,这让我很困惑。
标签: c# linq linq-to-sql case-insensitive stringcomparer