2013-02-05 18 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(); 
相关问题