我可以优化我的LINQ查询吗?



我正在尝试使用LINQ创建我的第一个数据库查询。为了练习,我正在使用Microsoft的2014年Adventure Works数据库。

db图。

我的第一个目标之一是为DataService创建静态方法,以返回给定供应商名称的所有产品列表。看来我的方法返回正确的数据,但我认为它非常优化。我可以以某种方式改进吗?

public static List<Product> GetProductsByVendorName(string vendorName)
{
    AdventureWorksDatabaseClassDataContext dc = new AdventureWorksDatabaseClassDataContext();
    int vendorID = dc.Vendors.Where(vendor => vendor.Name == vendorName).Select(vendor => vendor.BusinessEntityID).First();
    IEnumerable <ProductVendor> productsVendor = dc.ProductVendors;
    IEnumerable<int> selectedProductsID = from ProductVendor productVendor in productsVendor
                                          where productVendor.BusinessEntityID == vendorID
                                          select productVendor.ProductID;
    IEnumerable<Product> products = dc.Products;
    IEnumerable<Product> selectedProducts = from Product p in products
                                            where selectedProductsID.Contains(p.ProductID)
                                            select p;
    return selectedProducts.ToList();
}

您应该在数据库侧使用加入,以避免通过网络传输数据并将实体加载到内存中:

from v in dc.Vendors
join pv in dc.ProductVendors on v.BusinessEntityID equals v.BusinessEntityID
join p in dc.Products on p.ProductID equals pv.ProductID
where v.Name == vendorName
select p

请注意,如果您具有正确的导航属性设置,则此查询看起来像

dc.Vendors.Where(v => v.Name == vendorName)
  .SelectMany(v => v.ProductVendors.Select(pv => pv.Product))

最新更新