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