在项目中,我有两个表
一家餐厅可以有几种意见。我希望我的应用程序显示餐厅及其平均评分。我创建代码:
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();
答案 0 :(得分:2)
在查询中,您首先将两个序列连接到匿名类型为z
的新中间序列{ResturantId, Name, Address, ReviewId, Mark}
中;然后您过滤z
以仅获取具有适当的RestaurantId的记录,然后按餐厅ID进行分组(我想是无用的,因为结果集中只有一个餐厅ID),所以...
问题在于g.FirstOrDefault()
类型是z
序列条目的类型-匿名类型(例如Restaurant and Review的交叉产品);要获取Restaurnt,您可以构建新实例,也可以根据您拥有的_context.Restaurants
从RestaurantId
提取它