【发布时间】:2011-09-06 17:07:24
【问题描述】:
我有一个查询,它在 Linq to 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?
我已经尝试迭代每个术语,但是这给了我匹配单个术语而不是所有术语的问题。
更新 我解决了这个问题......通过改变我的要求:) 我仍然很想知道如何实现我的初始要求。
【问题讨论】:
标签: linq linq-to-sql lambda contains