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