EF-запрос с группировкой by, where и условием 'HAVING' в качестве отдельного счетчика - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь получить 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...