【发布时间】:2020-09-14 20:29:24
【问题描述】:
在项目中我有两个表
- 餐厅(餐厅 ID、名称、地址)
- RestaurantReview(ReviewId、RestaurantId、Mark)
我想显示一家餐厅并计算其平均分数
var lj = (from x in _context.Restaurant
join y in _context.RestaurantReview on x.RestaurantId equals y.RestaurantId into z
select new
{
Name= x.Name,
Total = z.Average(x => Convert.ToInt32(x.Mark))
}).ToList();
运行此代码时出现错误
System.InvalidOperationException: „Processing of the LINQ expression 'GroupJoin<Restaurant, RestaurantReview , int, <>f__AnonymousType4<string, double>>(
outer: DbSet<Restaurant>,
inner: DbSet<RestaurantReview >,
outerKeySelector: (x) => x.RestaurantId,
innerKeySelector: (y) => y.RestaurantId,
resultSelector: (x, z) => new {
Name = x.Name ,
Total = Average<RestaurantReview >(
source: z,
selector: (x) => ToInt32(x.mark))
})' by 'NavigationExpandingExpressionVisitor' failed. This may indicate either a bug or a limitation in EF Core.
我尝试使用其他查询,但每次都遇到同样的错误
【问题讨论】:
-
好像
Average(x => Convert.ToInt32...)无法翻译。试试Select(x => Convert.ToInt32...).Average()。 -
@GertArnold 感谢您的帮助。我删除了这一行
Total = z.Average(x => Convert.ToInt32(x.Mark)),我得到了同样的错误:(你能回答我如何处理这个问题吗(修复错误或以不同的方式下载数据)? -
尝试使用导航属性而不是连接 (
Restaurant.RestaurantReviews)。反正好多了。 -
如果我添加选择
select restaurant.RestaurantReviews.Average(x=>Convert.ToInt32(x.Mark)我是否能够以某种方式从餐厅获取其余物品(例如名称或 ID)? -
@GertArnold 感谢您的帮助,我创建
select new { ...}并从数据库中获取值并使用Average = restaurant.RestaurantReviews.Average(x=>Convert.ToInt32(x.Mark)计算平均值 :)
标签: c# asp.net entity-framework linq asp.net-core