c# - 搜索查询给出 LINQ to SQL 异常

标签 c# linq linq-to-sql exception contains

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

异常(exception)情况是:

Local sequence cannot be used in LINQ to SQL implementations of query operators except the Contains operator.

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


目标

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

例如。如果有一个对象 o 带有 o.name="creek mill"o.street="St. Petersroad",那么一个搜索“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 转换。

关于c# - 搜索查询给出 LINQ to SQL 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6788823/

相关文章:

c# - 多重绑定(bind)作为 XAML 中的资源

javascript - ASP MVC AJAX 返回对象并在 JavaScript 中作为关联数组进行访问

c# - 文件.复制错误 : The requested operation could not be completed due to a file system limitation

c# - 如何加 express 归搜索功能?

c# - 将并行扩展或并行 LINQ 与 LINQ Take 结合使用

vb.net - 使用 GridView 和 LINQ 进行排序的最佳方法是什么?

.net - Column.DbType 影响运行时行为

c# - 在默认构造函数或内联中​​初始化变量之间有区别吗?

c# - 在C#中的Linq IN错误

linq-to-sql - Linq to sql,将原实体复制到新实体并保存