微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 搜索查询提供LINQ to SQL异常

对于以下查询,我得到一个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.

如何修改查询以与LINQ to sql兼容?

目标

查询的目标是这样的.我有一个搜索术语列表和一个包含对象的数据库.如果所有搜索项都是至少一个属性的子字符串,则应返回一个对象.

例如.如果有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] 举报,一经查实,本站将立刻删除。

相关推荐