2011-05-25 74 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);