Вычислить среднее значение с помощью двух таблиц - PullRequest
1 голос
/ 27 мая 2020

В проекте у меня две таблицы

  • Ресторан (RestaurantId, Name, Adress)
  • RestaurantReview (ReviewId, RestaurantId, Mark)

Один Ресторан может иметь несколько мнений. Я хочу, чтобы в моем приложении отображался ресторан и его средний рейтинг. Создаю код:

var resReviews = (
  from x in _context.Restaurant
  join y in _context.Reviews on x.IdRestauracji equals y.RestaurantId into z
  from a in z
  group a by a.RestaurantId into g
  select new
  {

     RatingAverage = g.Average(x => Convert.ToInt32(x.Mark))
  }
).ToList();

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

var resReviews = (
  from x in _context.Restaurant
  join y in _context.Reviews on x.IdRestauracji equals y.RestaurantId into z
  from a in z
  group a by a.RestaurantId into g
  select new
  {
     Restaurant = g.FirstOrDefault();
     RatingAverage = g.Average(x => Convert.ToInt32(x.Mark))
  }
).ToList();

1 Ответ

2 голосов
/ 27 мая 2020

В вашем запросе вы сначала объединяете две последовательности в новую промежуточную последовательность z анонимного типа {ResturantId, Name, Address, ReviewId, Mark}; затем вы фильтруете z, чтобы получить только записи с соответствующим RestaurantId, затем группируете по идентификатору ресторана (бесполезно, я полагаю, поскольку вы получаете только один идентификатор ресторана в наборе результатов), поэтому ...

Проблема в этот тип g.FirstOrDefault() является типом записи последовательности z - анонимный тип (например, перекрестный продукт Ресторан и Обзор); чтобы получить Restaurnt, вы можете либо создать новый экземпляр, либо получить его из _context.Restaurants на основе RestaurantId, у вас есть

...