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

C# 我可以优化我的LINQ查询吗?,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,我正在尝试使用LINQ创建我的第一个数据库查询。为了练习,我正在使用微软的数据库 我的首要目标之一是为DataService创建静态方法,返回给定供应商名称的所有产品的列表。看起来我的方法返回了正确的数据,但我认为它的优化效果很差。我能改进一下吗 public static List<Product> GetProductsByVendorName(string vendorName) { AdventureWorksDatabaseClassDataContext dc

我正在尝试使用LINQ创建我的第一个数据库查询。为了练习,我正在使用微软的数据库

我的首要目标之一是为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))

看起来你在写一个加入代码。改为写在查询中。我投票将此问题作为主题外的问题结束,因为没有指定此代码的具体问题。考虑一下要问重构问题,是的,使用一个查询而不是三个不同的查询。我建议您在单个查询中使用导航属性。忘记提到我不允许使用LINQ-SQL学术要求的其他框架或工具。