2

我正在尝试使用 Linq to Entities 来查找不存在订单的类别。

 TABLE Customer              TABLE Order
------------------         ----------------
CustId   Category          OrderId FKCustId
  1         2                 1       1
  2         2
  3         3

这是经典的一对多客户/订单关系。鉴于此数据,只有类别 3 没有与之关联的订单,因此我想生成一个以类别 3 作为唯一项目的结果集。这一定是一个直截了当的查询,但我无法弄清楚。我尝试了很多不同的角度;这是一个不起作用的:

var dtos = ctx.Customers
       .GroupBy(c => c.Category)
       .Where(c => !c.Any(c2 => !c2.Orders.Any()))
       .Select(c => c.Key);

当我尝试这个时,它返回了一个确实有订单的类别,而没有返回缺少订单的类别。

提前感谢您的帮助!罗杰

4

2 回答 2

1

您的查询很接近,但!Any随后!Any是抛弃您的逻辑。您想要选择所有客户都没有订单的类别。但是您的查询选择了没有客户没有订单的所有类别。I hope that made sense

尝试将您的第一个更改!AnyAll

var dtos = ctx.Customers
   .GroupBy(c => c.Category)
   .Where(c => c.All(c2 => !c2.Orders.Any()))
   .Select(c => c.Key);

或在查询语法中:

var dtos = 
    from c in Customers
    group c by c.Category into g
    where g.All(c => !c.Orders.Any())
    select g.Key;

或者将第二个更改!AnyAny.

var dtos = ctx.Customers
   .GroupBy(c => c.Category)
   .Where(c => !c.Any(c2 => c2.Orders.Any()))
   .Select(c => c.Key);

或在查询语法中:

var dtos = 
    from c in Customers
    group c by c.Category into g
    where !g.Any(c => c.Orders.Any())
    select g.Key;
于 2013-03-30T00:55:24.887 回答
0

您首先需要获取没有任何订单的客户,然后获取类别。先做你的哪里,然后把类别拿出来

于 2013-03-30T00:54:58.380 回答