У меня есть строка, которую я преобразую в двумерный массив для поиска в 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, чтобы он делал то же самое по-другому