Получил ошибку вложенного запроса Linq - есть ли обходные пути? - PullRequest
0 голосов
/ 09 мая 2019

У меня есть строка, которую я преобразую в двумерный массив для поиска в Linq.

var searchWords = "one two three | four five six";

var groups = searchWords.Split('|')
    .Select(x => x.Split())
    .ToArray();

Затем я запрашиваю одну из моих таблиц Entity Framework - идея заключается в том, что я ищустроки, которые соответствуют всем трем словам (в любом порядке) хотя бы в одной группе.

Таким образом, "three one two" является допустимым результатом.

Я использую универсальный шаблон единицы работы / репозитория(на всякий случай, если кто-то запутался), но он принимает любое выражение, как предложение Where.

Вот запрос, который не выполняется:

var result = Base.View.Query<Keyword>(k =>
    groups.Any(g => g.All(w => k.Term.Contains(w))));

The table Keyword contains a string name 'Term'.
The content of Term would be something like "three two one".

Как видите, я пытаюсь найти.Any() group где .All() the words - contained in the table string k.Term

Вышеприведенный запрос является эквивалентом следующего запроса, который работает:

var result = Base.View.Query<Keyword>(k =>
    primaryGroup.All(w => k.Term.Contains(w)) ||
    secondaryGroup.All(w => k.Term.Contains(w)))

Но, к сожалению, этот не легко масштабируется.

Я получаю, что страшные не могут принять эту ошибку вложенного запроса.

The nested query is not supported. Operation1='Case' Operation2='Collect'

Я не ищу взлом для проблемы вложенности, но задавался вопросом, была ли другаяспособ реструктуризации запроса Linq, чтобы он делал то же самое по-другому

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...