哪里需要客户评价?

Where is client evaluation needed?

我有一个查询在 Linq to Objects 中运行良好 fiddle:

var list = from order in orders
             join detail in details
             on order.id equals detail.order into od
             select new { order = order, details = od };

当数据在数据库中时,我尝试应用相同的查询(注意我正在手动将 Linq 映射到 Sql):

public class dbContext: DbContext {
   public DbSet<Order> Orders { get; set; }
   public DbSet<Detail> Details { get; set; }
   protected override void OnConfiguring(DbContextOptionsBuilder oB) {
     oB.UseSqlServer("...connection string...");
   }
}

using (var db = new dbContext() {
  var list = from order in db.Orders
               join detail in db.Details
               on order.id equals detail.order into orderDetails
               select new { order = order, details = orderDetails };
}

以上给出:

could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to 'AsEnumerable', 'AsAsyncEnumerable', 'ToList', or 'ToListAsync'. See https://go.microsoft.com/fwlink/?linkid=2101038 for more information.

我在最后一行尝试了details = orderDetails.ToList(),但还是出现了同样的错误。我应该在哪里添加手动客户评估?


一些背景信息:以下数据库查询(没有 into)工作正常:

var list = from order in db.Orders
            join detail in db.Details
            on order.id equals detail.order
           select new { order = order, detail = detail };

您应该声明 Navigation Properties 并使用类似以下的内容,而不是联接:

var query = from order in db.Orders
  select new { order = order, details = order.OrderDetails };

var list = query.ToList();

或者干脆

var list = db.Orders.Include(o => o.OrderDetails).ToList();