Я пытаюсь получить EF-эквивалент следующего запроса SQL Server, где он возвращает список всех клиентов, чей счет продукта превышает 1:
SELECT [customer]
FROM [Orders]
where product = 'foo'
OR product = 'bar'
GROUP BY customer
HAVING COUNT(DISTINCT(product)) > 1
Это то, что у меня есть на данный момент как синтаксический код метода EF:
var customerList = dbContext.GroupBy(l => l.customer)
.Select(g => new
{
Customer = g.Key,
Count = g.Select(l => l.product).Distinct().Count(),
Product = g.Select(f => f.product).FirstOrDefault()
}).Where(w => w.Count > 1 && (w.Product == "foo" || w.Product == "bar"))
.Select(s => s.Customer).ToList();
Возвращает неверный список, как показано ниже:
customer Products
--------------------
Customer1 Foo, Bar
Customer2 Foo, Bar
Customer3 Foo, Bar
Customer4 Foo, Foo
Ожидаемый список должен быть:
customer Products
--------------------
Customer1 Foo, Bar
Customer2 Foo, Bar
Customer3 Foo, Bar