Я использую LINQ to Entities и пытаюсь выполнить простой запрос OR. У меня есть таблица «Ссылки», и когда я запускаю запрос, я хочу включить все ссылки, содержащие любой тег из списка тегов, и все ссылки, соответствующие поисковому запросу. Например:
var tags = new List<string>
{
"games",
"events",
"recipes"
};
var searchTerms = new List<string>
{
"hockey",
"barbecue",
"cheesecake",
"basketball"
}
var links = _entityContainer.Links
.Where(x => x.Tags.Any(y => tags.Contains(y.Name))
.Where(x => searchTerms.Any(y => x.Title.Contains(y)));
Примечание: объект ссылки имеет свойство навигации, называемое Tags
, поэтому в первом .Where()
я проверяю каждый из тегов в коллекции ссылки, чтобы увидеть, содержит ли список тегов, которые я ищу, один из их.
Во втором .Where()
я просто проверяю, содержит ли свойство заголовка ссылки какое-либо из условий поиска.
Моя проблема в том, что этот код включает в себя все ссылки, которые содержат хотя бы один тег из списка И соответствуют одному из условий поиска. Но я хочу включить оба вместе. Я хочу, чтобы мой список ссылок включал в себя все ссылки, которые соответствуют 1 или более тегам в списке ИЛИ соответствуют 1 или более поисковым запросам в списке.
У меня также есть проблема из-за tags.Contains()
и searchTerms.Any()
, потому что это вызовы, которые нельзя преобразовать в выражения для передачи в EF. Они сработали бы, если бы я сделал ToList()
, но я не смогу этого сделать, так как это приведет к тому, что в память будет помещено очень большое количество записей.
Есть предложения по достижению моей цели?