Сортировка ICollection по убыванию по среднему значению, включая обнуляемые значения - PullRequest
0 голосов
/ 10 сентября 2011

Учитывая следующий код:

class Book {
    public int ID { get; set; }
    public string Name { get; set; }
    public ICollection<Review> Reviews { get; set; }
}

class Review {
    public int ID { get; set; }
    public int? Overall { get; set; }
    public string Comment { get; set; }
}

И при условии, что у меня есть список каждой книги в базе данных:

var books; // List<Book>

Я хотел бы показать пользователю книги, заказанныесредний обзор.В идеале, список книг должен иметь самый высокий средний обзор сверху и сортироваться по убыванию.Учитывая, что у меня общая оценка в «Обзоре» как нулевое целое число, некоторые книги не будут иметь рецензий, не говоря уже об общем балле.У меня проблемы с сортировкой этих данных, я пробовал, казалось бы, каждую комбинацию:

books.OrderByDescending(b => b.Reviews.Average(a => a.Overall));

Можно ли отсортировать мой список без создания второго списка, чтобы получить что-то вроде:

  • Книга A (4.5 / 5)
  • Книга B (4.3 / 5)
  • Книга C (3.9 / 5)
  • Книга D (3.5 / 5)
  • Книга E (- / 5)
  • Книга F (- / 5)

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 10 сентября 2011

Вы должны быть в состоянии использовать это:

books.OrderByDescending(b => 
                  (b.Reviews == null) ? 0:b.Reviews.Average(r => r.Overall??0));
0 голосов
/ 11 сентября 2011

Спасибо TheCodeKing за указание мне в правильном направлении. Вот что решило проблему:

books.OrderByDescending(b => b.Reviews.Count() == 0 ? 0 : b.Reviews.Average(r => r.Overall ?? 0));
...