Entity framework 如何在实体框架中根据ID列表获取平均值

Entity framework 如何在实体框架中根据ID列表获取平均值,entity-framework,linq,aggregate-functions,Entity Framework,Linq,Aggregate Functions,我有一张表,上面写着产品,它包含两列(ProductId,Price)。我正在从客户端(IOS、Android)获取产品ID列表。有没有更好的方法来代替迭代列表,逐个获得价格,然后计算平均价格?如果我理解正确,您有一个带有产品ID的列表,希望获得所选产品的平均价格。您可以使用和的组合,如下所示: var average = ProductList.Select(p => p.Price).Average(); List<int> productIds = ...; var a

我有一张表,上面写着产品,它包含两列(ProductId,Price)。我正在从客户端(IOS、Android)获取产品ID列表。有没有更好的方法来代替迭代列表,逐个获得价格,然后计算平均价格?

如果我理解正确,您有一个带有产品ID的列表,希望获得所选产品的平均价格。您可以使用和的组合,如下所示:

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

谢谢Ivan,我只是想知道,是否有可能在一个查询中得到Min、Max和Average?我认为这是可能的,尽管在LINQ中不是很自然。我记得,需要使用
groupby
常量才能生成多个聚合。再次感谢Ivan:)
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;