【问题标题】:System.InvalidOperationException while join two table连接两个表时出现 System.InvalidOperationException
【发布时间】: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 =&gt; Convert.ToInt32...)无法翻译。试试Select(x =&gt; Convert.ToInt32...).Average()
  • @GertArnold 感谢您的帮助。我删除了这一行Total = z.Average(x =&gt; Convert.ToInt32(x.Mark)),我得到了同样的错误:(你能回答我如何处理这个问题吗(修复错误或以不同的方式下载数据)?
  • 尝试使用导航属性而不是连接 (Restaurant.RestaurantReviews)。反正好多了。
  • 如果我添加选择 select restaurant.RestaurantReviews.Average(x=&gt;Convert.ToInt32(x.Mark) 我是否能够以某种方式从餐厅获取其余物品(例如名称或 ID)?
  • @GertArnold 感谢您的帮助,我创建 select new { ...} 并从数据库中获取值并使用 Average = restaurant.RestaurantReviews.Average(x=&gt;Convert.ToInt32(x.Mark) 计算平均值 :)

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


【解决方案1】:

通过在您的代码中缺失进行分组。在 linq 表达式中添加分组依据

【讨论】:

  • 我添加了代码from a in z group a by a.IdRestauracji into g,但现在我只能访问属性键或值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多