我有两张表有一对多的关系。
One Order有很多产品。
我想列出每个订单中的免费产品(每个订单一个)。
我尝试过这样的事情:
this.ObjectContext.ORDERS.Include("PRODUCTS").Where(e=>e.PRODUCTS.price == 0).OrderBy(e => e.Order);
但这不起作用。
还有其他方法吗?
提前致谢。
答案 0 :(得分:3)
如果PRODUCTS
是一个集合,您可以使用Any()
扩展方法查看是否有任何产品是免费的(或者All()
方法,以确定所有产品是否免费):
this.ObjectContext.ORDERS
.Include("PRODUCTS")
.Where(o => o.PRODUCTS.Any(p => p.price == 0))
.OrderBy(e => e.Order);
根据您对所需输出的说明(包含可选免费产品的所有订单),您可以使用此查询:
this.ObjectContext.ORDERS
.Include("PRODUCTS")
.Select(o => new {
Order = o,
FreeProduct = o.PRODUCTS.FirstOrDefault(p => p.price == 0)
});
它将返回包含订单的异常类型序列和免费产品(如果不存在免费产品,则返回null)。