1

私は機能するソリューションを実装しましたが、LINQ は私にとって何か重要であり、必要な情報を見つけるのに苦労しています。

ここに私が持っているものがあります:

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 つではなく 1 つの選択で同じ結果を達成したいと考えています。

4

3 に答える 3

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 - Visual Studio 2010 の C# の結合演算子」を参照してください。

お役に立てれば!

于 2013-02-05T20:00:49.937 に答える
1

使用しているLINQのフレーバーについては言及していませんが、ProductCategoriesとProductsの間に関連付けが設定されていると仮定すると、次のようなことができるはずです:

int Cat = Int32.Parse(CategoriesDropper.SelectedValue);
var products = from pc in db.ProductCategories
               where pc.Category == cat
               from p in pc.Products
               select p;
于 2013-02-05T20:01:37.570 に答える
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();
于 2013-02-05T20:06:52.393 に答える