Linq仅包含一对多关系中的一个对象

时间:2012-10-24 13:06:30

标签: linq

我有两张表有一对多的关系。

One Order有很多产品。

我想列出每个订单中的免费产品(每个订单一个)。

我尝试过这样的事情:

this.ObjectContext.ORDERS.Include("PRODUCTS").Where(e=>e.PRODUCTS.price == 0).OrderBy(e => e.Order);

但这不起作用。

还有其他方法吗?

提前致谢。

1 个答案:

答案 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)。