使用LINQ获得平均值

时间:2011-01-04 04:41:40

标签: c# linq

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

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

如果返回10条记录,我需要在Rating字段中计算平均值。它在我的DB中被定义为Double。我正在使用LINQ到EF。所以我会分配UserId,MiscId,而评级将是返回记录的平均值。我将一个对象传递回客户端代码。

3 个答案:

答案 0 :(得分:89)

double RatingAverage = ctx.Rates.Where(r => r.Id == Id).Average(r => r.Rating);

答案 1 :(得分:31)

您是否在寻找每个用户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()
                }); 

答案 2 :(得分:0)

如果您不想单独计算平均值并且评级来自其他表格,这也可能有用

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;

它将返回平均评分。 注意:将“评分”用作可为空的双精度类型,即double? Rating