对于以下查询,我得到一个LINQ to sql异常.
var terms = "bob town".Split(' '); var q = from m in db.Monument where terms.All(t => new List<string>() { m.Name,m.Street,m.Owner }.Any( p => p.Contains(t))) select m;
例外是:
Local sequence cannot be used in LINQ to sql implementations of query
operators except the Contains operator.
目标
查询的目标是这样的.我有一个搜索术语列表和一个包含对象的数据库.如果所有搜索项都是至少一个属性的子字符串,则应返回一个对象.
例如.如果有o.name =“creek mill”和o.street =“St.Petersroad”的对象o,那么搜索“mill petersroad”应返回此对象,但搜索“mill foobar”不应该.
解决方法
因此,实际问题是Linq-To-sql不知道如何将Linq的Terms部分转换为有效的sql语句.因此,您必须重新调整查询以帮助它.
我假设我们想使用Contains函数来获取使用sql IN运算符的sql语句.这是我的建议.
var terms = "bob town".Split(' '); var q = from m in db.Monument where terms.Contains(m.Name) || terms.Contains(m.Street) || terms.Contains(m.Owner) select m;
我没有测试过这个,但它看起来应该可以工作,应该由Linq-To-sql转换.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。