我正在尝试使用Linq to Entities来查找没有订单的类别。
TABLE Customer TABLE Order
------------------ ----------------
CustId Category OrderId FKCustId
1 2 1 1
2 2
3 3
这是一个典型的1对多客户/订单关系。鉴于此数据,只有类别3没有与之关联的订单,因此我想生成一个结果集,其中类别3是唯一的项目。这必须是一个简单的查询,但我无法弄清楚。我尝试了很多不同的角度;这是一个不起作用的:
var dtos = ctx.Customers
.GroupBy(c => c.Category)
.Where(c => !c.Any(c2 => !c2.Orders.Any()))
.Select(c => c.Key);
当我尝试这个时,它返回了一个 订单的类别,而没有返回缺少订单的类别。
提前感谢您的帮助! 罗杰
答案 0 :(得分:1)
您的查询已接近,但!Any
后跟!Any
会丢失您的逻辑。您想要选择所有客户都没有订单的类别。但是您的查询会选择所有没有客户没有订单的类别。 我希望有道理
尝试将您的第一个!Any
更改为All
:
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;
或者将第二个!Any
更改为Any
。
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;
答案 1 :(得分:0)
您首先需要获得没有任何订单的客户,然后获取类别。排序先做你的位置然后分类