我有一个表格,其中包含产品,其中包含两列( ProductId,Price )。我从客户端(IOS,Android)获得产品ID列表。而不是迭代列表并逐个获得价格然后计算平均值,有没有更好的方法呢?
答案 0 :(得分:2)
如果我理解正确,您有一个包含产品ID的列表,并希望获得所选产品的平均价格。您可以像这样使用Contains
和Average
的组合:
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;
答案 1 :(得分:1)
var average = ProductList.Select(p => p.Price).Average();