我有一个查询,它会在Linq中向Sql抛出一个异常。
Local sequence cannot be used in LINQ to SQL implementation of query operators except the Contains() operator.
我已经看到了很多相关的问题所以我(大致)理解为什么它不起作用的原因(lambda表达式中的值term
不能转换为SQL查询的字符串值),但是我不知道如何重组这个。
var searchTerms = userQuery.Split(' ').ToList().ConvertAll(term => term.ToLower());
var qry = (from tree in someQueryable
join widget in myDb.Widgets
on tree.ParentId equals widget.Id
where
searchTerms.All(term => tree.Title.ToLower().Contains(term) //Can't use Contains on term, as term isn't a local variable
|| searchTerms.All(term => widget.Title.ToLower().Contains(term) //And again here
|| (tree.Description != null && searchTerms.All(term =>
tree.Description.ToLower().Contains(term))) //And here
orderby tree.SomeDate descending
select tree);
如何获取标题,说明或ParentWidget.Title包含所有搜索字词的所有trees
?
我已尝试迭代每个术语,但是这给了我匹配单个术语的问题,而不是所有术语。
更新 我通过改变我的要求解决了这个问题:) 我仍然很想知道如何实现我的初始要求。
答案 0 :(得分:0)
from term in SearchTerms
from tree in someQueryable
join widget in myDb.Widgets
where tree.Title.ToLower().Contains(term) ||
widget.Title.TowLower().Contains(term) ||
(tree.Description != null && tree.Description.ToLower.Contains(term))
orderby tree.SomeDate descending
select tree