这是我的场景(表格):
Orders
======================
Id (int)
description (varchar)
Products
======================
Id (int)
description (varchar)
OrderProductXREF (cross reference table)
======================
ProductId (int)
OrderId (int)
我觉得你有个主意。这里没什么不寻常的。
导入EDMX文件时 OrderProductXREF 表不可见实体。我所看到的只是导航属性:产品用于实体订单,订单用于实体产品。
所以,我的问题: 我需要Linq和/或Lambda语句,它将列出所有没有任何订单关联的产品。或者,列出所有从未订购的产品。
SQL会像这样:
SELECT * FROM Products
WHERE Id NOT IN
(SELECT ProductId
FROM OrderProductXREF)
修改 呃...对不起忘了我的问题中的一个小细节。
这是新的SQL:
SELECT * FROM Products
WHERE Id NOT IN
(SELECT ProductId
FROM OrderProductXREF
WHERE OrderID = 1)
简而言之,所有未按ID = 1
排序的产品由于
答案 0 :(得分:2)
var query = db.Products.Where(product => !product.Orders.Any());
你应该检查生成的SQL。我希望期待它是明智的,但如果不是,你可能会想看看其他选择。
编辑:要检查不是订单ID 1的产品,您可以使用:
var query = db.Products.Except(db.Orders
.Where(order => order.Id == 1)
.Single()
.Products);
或者:
var query = db.Products.Where(product => !product.Orders
.Where(order => order.Id == 1)
.Any());
答案 1 :(得分:2)
var q = from p in Context.Products
where !p.Orders.Any()
select p;
关于你的“一个小细节”:
var q = from p in Context.Products
where !p.Orders.Any(o => o.Id == 1)
select p;