2013-02-05 24 views
1

我已經實現了一個可以工作的解決方案,但是LINQ對我來說是一件小事,我正在努力尋找所需的信息。我如何使用Linq和ASP.Net Forms編寫多個表之間的連接

以下是我有:

var prodCat = from pc in db.ProductCategories 
       where pc.Category == Int32.Parse(CategoriesDropper.SelectedValue) 
       select pc; 

List<int> productIds = new List<int>(); 
foreach (var pc in prodCat) 
{ 
    productIds.Add(pc.Product); 
} 

var products = from p in db.Products 
       where productIds.Contains(p.Id) 
       select p; 

ProductsGridView.DataSource = products; 
ProductsGridView.DataBind(); 

我非常希望有一個單一的選擇,而不是兩個,以達到同樣的效果。

回答

2
var products = from pc in db.ProductCategories 
       join p in db.Products on pc.Product equals p.Id 
       where pc.Category == Int32.Parse(CategoriesDropper.SelectedValue) 
       select p; 

ProductsGridView.DataSource = products; 
ProductsGridView.DataBind(); 

查看LINQ - Join Operators in C# for Visual Studio 2010僅供參考。

希望這會有所幫助!

1

你沒有提到你正在使用的LINQ的味道,但假設你有ProductCategories與產品之間設置的關聯,你應該能夠做這樣的事情:

int Cat = Int32.Parse(CategoriesDropper.SelectedValue); 
var products = from pc in db.ProductCategories 
       where pc.Category == cat 
       from p in pc.Products 
       select p; 
+0

做到這一點最終作爲一個單一的選擇或將執行兩個選擇從SQL DB? – DrLazer

+0

由於可組合性和延遲執行,它將是在數據綁定中調用.GetEnumerator時生成的一個查詢。 –

+0

我不能幫助,但想知道爲什麼連接關鍵字存在 – DrLazer

1
var selectedCategory = Int32.Parse(CategoriesDropper.SelectedValue); //Parse the value once 
var products = 
    from p in db.Products //foreach product in the database 
    join pc in db.ProductCategories 
    on pc.Product equals p.Id //where the Ids match 
    where pc.Category == selectedCategory //and with the same category 
    select p; //select the product 
ProductsGridView.DataSource = products; 
ProductsGridView.DataBind(); 
相關問題