linq性能,选择特定列或只选择全部

时间:2016-05-03 15:11:17

标签: c# performance linq

性能明智,这两者中哪一个是最快的?

  1. 只需使用where子句或不选择任何列等。

    var products = db.Products.OrderByDescending(p => p.ProductExpirationDate);                                              
    
  2. 或根据此查询更明确地使用列等

    var products = (from p in db.Products
    select new GenericEcomDataAccess.ProductView
    {
      ProductID = p.ProductID,
      ProductOwnerUserId = p.ProductOwnerUserId,
      ProductCurrency = p.ProductCurrency,
      ProductDescription = p.ProductDescription,
      ProductPrice = p.ProductPrice,
      ProductImage = p.ProductImage,
      ProductName = p.ProductName
    }).OrderByDescending(p => p.ProductExpirationDate).AsEnumerable().ToList();             
    

1 个答案:

答案 0 :(得分:0)

首先,它们产生不同的结果(第二个使用ToList()来改变结果类型)。

在性能方面,您没有提供足够的信息。它实际上取决于你的桌子。如果第二个查询提取表的每个列,它们是相同的。如果没有,第二个可能更快(因为对表的一部分进行排序需要较少的操作然后对整个表进行排序)。

但我猜它实际上并不重要,因为渐近它们是相同的。如果它不是你计划中性能关键的一部分,我的猜测是你不应该真正关心。

(是的,既然这些查询只是内部的SQL语句,最好用SQL标记来询问,而不是C#。或者至少将它添加到标签中。)