1

我有两个具有一对多关系的表。

一个订单有很多产品。

我想列出一个订单列表,每个订单都有免费产品(每个订单一个)。

我试过这样的事情:

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

但这不起作用。

还有其他方法吗??

提前致谢。

4

1 回答 1

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

于 2012-10-24T13:09:59.807 回答