Подтвердить что ты не робот

Получить среднее значение с помощью LINQ

Надеюсь, кто-то может помочь мне с синтаксисом LINQ для вычисления среднего. Например, у меня есть следующий запрос LINQ:

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

Если возвращается 10 записей, мне нужно рассчитать среднее значение в поле "Рейтинг". Он определяется как Двойной в моей БД. Я использую LINQ для EF. Поэтому я бы назначил UserId, MiscId, а рейтинг был бы средним по возвращенным записям. Я передаю один объект обратно клиентскому коду.

4b9b3361

Ответ 1

Вы ищете средний рейтинг за идентификатор пользователя? Если это так, вам нужно использовать GroupBy и Среднее значение.

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

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

Ответ 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;

Он вернет среднюю оценку. Примечание. Используйте значение "Нейбл. Двойной тип", т.е. double? Rating double? Rating