У меня есть запрос, который выдает исключение в Linq для Sql.
Local sequence cannot be used in LINQ to SQL implementation of query operators except the Contains() operator.
Я видел множество связанных вопросов, поэтому я (приблизительно) понимаю причину, ПОЧЕМУ она не работает (значение 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);
Как я могу получить все trees
, чьи Title, Description или ParentWidget.Title содержат ВСЕ условия поиска?
Я попытался выполнить итерацию по каждому термину, однако это дает мне вопрос о сопоставлении одного термина, а не всех терминов.
Обновление
Я решил проблему ... изменив мои требования :)
Мне все еще очень интересно узнать, как мои первоначальные требования могут быть достигнуты.