2016-06-15 24 views

回答

2

如果我理解正確,你有一個產品ID列表,並希望得到所選產品的平均價格。您可以使用ContainsAverage組合是這樣的:

List<int> productIds = ...; 
var averagePrice = db.Products 
    .Where(p => productIds.Contains(p.ProductId)) 
    .Select(p => p.Price) 
    .DefaultIfEmpty() 
    .Average(); 

Select其次DefaultIfEmpty是需要避免的異常時,過濾集不包含任何記錄。

更新:按照意見,得到幾個積累了與一個單一的查詢,也可以通過使用group by恆結構:

var info = (from p in db.Products 
      where productIds.Contains(p.ProductId) 
      group p by 0 into g // any constant would work 
      select new 
      { 
       MinPrice = g.Min(p => p.Price), 
       MaxPrice = g.Max(p => p.Price), 
       AveragePrice = g.Average(p => p.Price), 
      }).FirstOrDefault(); 
var minPrice = info != null ? info.MinPrice : 0; 
var maxPrice = info != null ? info.MaxPrice : 0; 
var averagePrice = info != null ? info.AveragePrice : 0; 
+0

感謝伊萬,只是想知道,是有可能得到最小值,最大值和平均值在一個單一的查詢? –

+0

我認爲這是可能的,雖然在LINQ中不太自然。我記得,需要使用'group by * * constant *'來生成多個聚合。 –

+0

檢查更新。乾杯:) –

1
var average = ProductList.Select(p => p.Price).Average();