我的代码有问题。我想检索上周的所有非活动客户端(无订单)。 这是我从数据库中获得的信息。 information in database picture 下面是我在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();
答案 0 :(得分:0)
像评论一样,应该为每个分组的客户计算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();
希望您对此有帮助。