2011-05-25 48 views
0

我有一个数据库有两个表:订单和产品。该数据库通过实体数据模型和LINQ-to-Entities公开。查找/加入LINQ到实体在C#

我有一个产品ID,我想获得所有引用产品的订单对象。我想了解如何使用LINQ来做到这一点。我知道我可以查询产品

int productID = GetProductID(); 
using (DatabaseContext database = new DatabaseContext()) 
{ 
    var products = from product in database.Products 
       where product.ProductID = productID 
       select product; 

} 

我知道这个LINQ查询让我带有特定产品ID的所有产品。但是,我想要Order对象。我试图找出一个Join并获取Order对象。我不在乎产品,因为我有产品ID。有没有办法做到这一点?

谢谢!

+2

Orders表不直接暴露在数据上下文中吗? – 2011-05-25 19:39:49

+0

这是产品和订单之间的多对多关系吗? – 2011-05-25 19:42:40

+0

你应该有Order.ProductID。 – Reniuz 2011-05-25 19:43:18

回答

1
var orders = from product in database.Products 
      join order in database.Orders on product.Key equals order.KeyField 
      where product.ProductID == productID 
      select order; 
+0

请注意,如果一个订单多次包含相同的产品,那可能会多次提供相同的订单。这可能不是问题,但值得了解。 – 2011-05-25 19:54:43

1

正常情况下,Order将不得不对产品的关系,让你写:

为了简单起见:

var orders = from order in database.Orders 
      where order.Products.Any(p => p.ProductID == productID) 
      select order; 
0

通常情况下,这将这样做[TABLE] <key/relation>

[Products]-<productId>-[OrderedProducts]-<orderId>-[Orders] 

var result = 
from op in OrderedProducts 
join o in Orders on op.OrderId equals o.Id 
join p in Products on op.ProductId equals p.Id 
select p 
0

之类的东西(取决于你拥有的属性):

context.Orders.Where(order => order.ProductId == myProduct.Id);