Получение неактивных клиентов с помощью LINQ - PullRequest
2 голосов
/ 30 мая 2020

У меня проблема с кодом. Я хочу получить всех неактивных клиентов (у которых нет заказов) с прошлой недели. Это моя информация из базы данных. информация в изображении базы данных Ниже мой код в LINQ, но он ничего не возвращает.

DateTime daysBeforeToday = DateTime.Today.AddDays(-7);
var queryCount = context.Orders.Select(x=>x.ID).Count();
var query = (from o in context.Orders
where o.OrderDate >= daysBeforeToday
select new { CustomerName = o.CustomerName, ID = o.ID } into Customers
group Customers by Customers.CustomerName into pg
where queryCount == 0
select pg.Key);
return query.ToList();

Пожалуйста, посоветуйте. Спасибо

ОБНОВЛЕНИЕ
Я нашел этот SQL оператор, который работает:

SELECT CustomerName, MAX(OrderDate) as LastOrderDate
FROM Orders 
GROUP By CustomerName
having MAX(OrderDate) < dateAdd(day,-7, GetDate())

, но когда я конвертирую в LINQ, он терпит неудачу. Что я сделал не так?

DateTime daysBeforeToday = DateTime.Today.AddDays(-7);
var queryMax = context.Orders.Select(x=>x.OrderDate).Max();

var query = (from o in context.Orders
            select new { CustomerName = o.CustomerName, Date = o.OrderDate } into Customers
            group Customers by Customers.CustomerName into pg
            where queryMax < daysBeforeToday
            select pg.Key);

return query.ToList();

1 Ответ

0 голосов
/ 30 мая 2020

Как и в комментарии, Max следует рассчитывать для каждого сгруппированного клиента, как следующий код:

DateTime daysBeforeToday = DateTime.Today.AddDays(-7);

var query = (from o in context.Orders           
            group o by o.CustomerName into pg
            where pg.Max(x => x.OrderDate) < daysBeforeToday
            select pg.Key);

return query.ToList();

Надеюсь, вы найдете это полезным.

...