none
ADO.NET Entitis Framework 中 LINQ 與 導航屬性的差別?同概念語法的不同! RRS feed

  • 问题

  • Database - Tables:

    ProductCategories: | ProductCategoryId | ProductCategoryName | Other |

    Products:  | ProductId | ProductCategoryId | ProductName | Other |

    根據主鍵查找單個產品:

    var Product = db.Products.FirstOrDefault(p => p.ProductId == 3); //OK,沒有問題。
    var CategoryOfProduct = (from c in db.ProductCategories from p in db.Products where p.ProductId == 3 where c.ProductCategoryId == p.ProductCategory.ProductCategoryId select c).FirstOrDefault(); // OK,沒有問題;

    //  var CategoryOfProduct = db.Products.FirstOrDefault(p => p.ProductId == 3).ProductCategory; // it's null!這樣得不到該產品對應的產品類別。但在上面LINQ中確實可以的,問題1:請問用導航屬性如何實現?


    var Category = db.ProductCategories.FirstOrDefault(c => c.ProductCategoryId == 3);//OK,米有問題。
    var ProductsByCategory = db.Products.Where(p => p.ProductCategory.ProductCategoryId == 2).ToList();//OK 米有問題。

    //var ProductsByCategory = db.ProductCategories.FirstOrDefault(c => c.ProductCategoryId == 1).Products.ToList();//查詢不出,問題又來了,問題2:LINQ 與 導航屬性如何取捨?

    在AEF里使用導航屬性與LINQ2SQL不同啊,同樣的代碼在LINQ2SQL里就可以運行,真難選擇。

    上面的2個例子,用導航屬性如何實現啊?

    2010年7月29日 7:18

答案

  • 1. 是想通过产品ID得到产品类别:

        ProductCategory category =( from category in db.ProductCategories join product in db.Products on product.ProductCategoryId equals category.ProductCategoryId where product.ProductId == 3 select category).FirstOrDefault<ProductCategory>();

    if (category !=null)  strCategory = category.ProductCategoryName;

    2.是想根据类别ID获取该类产品:

       IQueryable<Products> list = from product in db.Products  join category in ProductCategories on product.ProductCategoryId equals category.ProductCategoryId  where category.ProductCategoryId ==1 select product;

     

    • 已编辑 南帝 2010年7月30日 3:44 修正
    • 已标记为答案 Mog Liang 2010年8月5日 9:35
    2010年7月30日 3:31