Я надеюсь, что кто-то уловил идею из вопроса, но я не знал, как лучше обобщить.
Дело в том, что я пытаюсь сделать простой поиск в приложении. У меня есть объекты вопросов и тегов, подобные этим в StackOverflow, в отношениях «многие ко многим».
Я передаю массив идентификаторов тегов моему методу фильтрации. Он должен возвращать все объекты вопросов, которые имеют эти теги (с этими идентификаторами). Я сделал это так:
int[] tagIds = { 1, 2, 3};
var questions = myEntities.Questions
.ToList()
.Where(q => tagIds.Intersect(q.Tags.Select(t => t.Id).ToArray()).Any())
.ToList();
Все работало нормально, но теперь я добавил больше фильтров и методов, использующих этот фильтр, поэтому я хочу получить объект DbQuery вместо списка.
Я попытался удалить выражения .ToList(), чтобы получить соответствующий результат:
int[] tagIds = { 1, 2, 3};
var questions = myEntities.Questions
.Where(q => tagIds.Intersect(q.Tags.Select(t => t.Id).ToArray()).Any());
К сожалению, я получаю исключение, указывающее, что LINQ не распознает метод .ToArray(). Может ли кто-нибудь дать мне лучшее представление о том, как этого добиться?