使用两个表计算平均值

时间:2020-05-27 15:51:06

标签: c# asp.net entity-framework linq

在项目中,我有两个表

  • 餐厅(RestaurantId,名称,地址)
  • 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 个答案:

答案 0 :(得分:2)

在查询中,您首先将两个序列连接到匿名类型为z的新中间序列{ResturantId, Name, Address, ReviewId, Mark}中;然后您过滤z以仅获取具有适当的RestaurantId的记录,然后按餐厅ID进行分组(我想是无用的,因为结果集中只有一个餐厅ID),所以...

问题在于g.FirstOrDefault()类型是z序列条目的类型-匿名类型(例如Restaurant and Review的交叉产品);要获取Restaurnt,您可以构建新实例,也可以根据您拥有的_context.RestaurantsRestaurantId提取它