Я хочу применить несколько составных фильтров к группе данных, подобной этой:
Filter[] filters = new[] { new Filter { Name = "Bob", Gender = "Male" },
new Filter { Name = "Alice", Height = "Female" } };
_dbContext.People.Where(p => filter.Any(f => f.Name == p.Name && f.Gender == p.Gender)).Select(p => p.Id);
Меня интересует Ids
из Мужских Бобов и Женские Алисы .Извините Женский Бобс .Я не хочу тебя.
Это правильный способ решения этой проблемы в памяти Linq, но есть проблема.Вот как выглядит SQL EF (я проверяю это в своем профилировщике SQL-сервера)
SELECT [p].[Name], [p].[Gender], [p].[Id] FROM [People] AS [p]
Это ужасно.Он все копает, а затем выполняет реальную работу в памяти.Нет способа, которым это будет работать со многими людьми, оно остановится.
Есть ли способ сделать сгенерированный sql похожим на это?
SELECT
[Person].[Id]
FROM [Person]
WHERE
((([Person].[Name] = "Bob") AND ([Person].[Gender] = "Male"))
OR (([Person].[Name] = "Alice") AND ([Person].[Gender] = "Female")))
(как это возможно в Dapper )