Linq只包括一对多关系中的一个对象
我有两个一对多关系的表 一个订单有很多产品 我想在每个订单中列出一份免费产品的订单列表(每个订单一份) 我试过这样的方法:Linq只包括一对多关系中的一个对象,linq,Linq,我有两个一对多关系的表 一个订单有很多产品 我想在每个订单中列出一份免费产品的订单列表(每个订单一份) 我试过这样的方法: this.ObjectContext.ORDERS.Include("PRODUCTS").Where(e=>e.PRODUCTS.price == 0).OrderBy(e => e.Order); 但这是行不通的 还有其他方法吗 提前感谢。如果PRODUCTS是一个集合,您可以使用Any()扩展方法来确定是否有任何产品是免费的(或者,使用All()方法来确
this.ObjectContext.ORDERS.Include("PRODUCTS").Where(e=>e.PRODUCTS.price == 0).OrderBy(e => e.Order);
但这是行不通的
还有其他方法吗
提前感谢。如果
PRODUCTS
是一个集合,您可以使用Any()
扩展方法来确定是否有任何产品是免费的(或者,使用All()
方法来确定是否所有产品都是免费的):
根据您对所需输出(所有带有可选免费产品的订单)的说明,您可以使用以下查询:
this.ObjectContext.ORDERS
.Include("PRODUCTS")
.Select(o => new {
Order = o,
FreeProduct = o.PRODUCTS.FirstOrDefault(p => p.price == 0)
});
它将返回一个包含订单和免费产品的匿名类型序列(如果没有免费产品,则返回null)。如果没有免费产品,会发生什么?它会在没有产品的情况下退回订单吗???@zapico不,它根本不会退回订单。没有免费产品的订单将被跳过。如果没有订单包含免费产品,您将得到一个空序列。:(是否有任何方法使其返回订单?或者我是否应该在其他查询中返回它们并同时返回两个列表?感谢您的帮助:)@zapico我想您只需要包含至少一个免费产品的订单?不,不,我希望所有订单都有一个免费产品,如果有的话(一个订单中不可能有多个免费产品)
this.ObjectContext.ORDERS
.Include("PRODUCTS")
.Select(o => new {
Order = o,
FreeProduct = o.PRODUCTS.FirstOrDefault(p => p.price == 0)
});