使用 LINQ 获取平均值

Posted

技术标签:

【中文标题】使用 LINQ 获取平均值【英文标题】:Get Average Using LINQ 【发布时间】:2011-06-03 04:56:38 【问题描述】:

希望有人可以帮助我使用 LINQ 语法来计算平均值。例如,我有以下 LINQ 查询:

var rates = from rating in ctx.Rates  
            where rating.Id == Id  
            select new 
               
                UserId = rating.UserId,  
                Rating = rating.Rating  
            ;  

如果返回 10 条记录,我需要计算 Rating 字段的平均值。它在我的数据库中被定义为 Double。我正在使用 LINQ to EF。因此,我将分配 UserId、MiscId,而 Rating 将是返回记录的平均值。我将一个对象传回给客户端代码。

【问题讨论】:

【参考方案1】:
double RatingAverage = ctx.Rates.Where(r => r.Id == Id).Average(r => r.Rating);

【讨论】:

非常简单。谢谢! 是的 - 这很棒【参考方案2】:

您是否在寻找每个用户 ID 的平均评分?如果是这样,那么您需要同时使用GroupBy 和Average。

var rates = ctx.Rates
               .Where( r => r.Id == Id )
               .GroupBy( g => g.UserId, r => r.Rating )
               .Select( g => new
                
                   UserId = g.Key,
                   Rating = g.Average()
                ); 

【讨论】:

【参考方案3】:

如果您不想单独计算平均值并且评分来自另一个表,这也可以工作

var query = (from u in db.Users 
                     where rating.Id == Id
                     select new ViewModel
                     
                         UserId = rating.UserId
                         Rating = (from c in db.Comments where c.fkUserId.Equals(u.Id) select c.StarRating).Average()
                     ).ToList();
        return query;

它将返回评分平均值。 注意: 将 Rating 用作可空的 double 类型,即 double? Rating

【讨论】:

以上是关于使用 LINQ 获取平均值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用一个 linq 查询获得总数量?

LINQ 计算 SortedList<dateTime,double> 的移动平均值

使用 linq 检索平均分

使用 linq 计算 EF Core 中的平均评分

如何使用 Linq 按日期时间和平均结果对字典进行分组

LINQ/Lambda 表达式:加入列表并使用给定公式查找数据的平均计数