【问题标题】:Get Average Using LINQ使用 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 将是返回记录的平均值。我将一个对象传回给客户端代码。

【问题讨论】:

    标签: c# linq


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

    【讨论】:

    • 非常简单。谢谢!
    • 是的 - 这很棒
    【解决方案2】:

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

    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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多