LINQ To SQL 异常:本地序列不能在查询运算符(Contains 运算符除外)的 LINQ to SQL 实现中使用

2024-03-21

考虑这个 LINQ To SQL 查询。其目的是获取搜索词的 string[] 并将这些词应用到 SQL 表上的一堆不同字段:

string[] searchTerms = new string[] {"hello","world","foo"};
List<Cust> = db.Custs.Where(c => 
   searchTerms.Any(st => st.Equals(c.Email))
|| searchTerms.Any(st => st.Equals(c.FirstName))
|| searchTerms.Any(st => st.Equals(c.LastName))
|| searchTerms.Any(st => st.Equals(c.City))
|| searchTerms.Any(st => st.Equals(c.Postal))
|| searchTerms.Any(st => st.Equals(c.Phone))
|| searchTerms.Any(st => c.AddressLine1.Contains(st))
)
.ToList();

出现异常:

本地序列不能在查询运算符的 LINQ to SQL 实现中使用(Contains() 运算符除外)

问题:为什么会引发此异常,如何重写查询以避免此异常?


将查询中的 Any 用法替换为 Contains。例如:

searchTerms.Contains(c.Email)

这应该会得到您正在寻找的结果。它看起来向后,但它是正确的 - 它将为包含 searchTerms 中所有元素的 Contains 内的每个字段生成一个 IN 运算符。

AddressLine1 部分​​不会以这种方式工作 - 您必须自己循环生成比较

c.addressLine1.Contains(...)

就像是谓词生成器 http://www.albahari.com/nutshell/predicatebuilder.aspx对此会有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LINQ To SQL 异常:本地序列不能在查询运算符(Contains 运算符除外)的 LINQ to SQL 实现中使用 的相关文章

随机推荐