加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 21:21:10 所属栏目:百科 来源:网络整理
导读:对于以下查询,我得到一个LINQ to SQL异常. var terms = "bob town".Split(' ');var q = from m in db.Monument where terms.All(t = new Liststring() { m.Name,m.Street,m.Owner }.Any( p = p.Contains(t))) select m; 例外是: Local sequence cannot be u
对于以下查询,我得到一个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转换.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读