运行此查询:
var holderAccounts = db.AccountDetails.Include(p => p.BranchDetail)
.Where(p => holder.AccountDetails.Any(a => a.Id == p.Id));
我得到了这个例外:
无法创建“CodeFirst.AccountDetail”类型的常量值。在此上下文中仅支持原始类型或枚举类型。
关系是:
AccountHolder 1 to many AccountDetail 1 to 1 BranchDetail
我做错了什么?
答案 0 :(得分:1)
最有可能的是,Any()不受支持。试试这个问题:
var ids = holder.AccountDetails.Select(x => x.Id).ToList();
var holderAccounts = db.AccountDetails.Include(p => p.BranchDetail)
.Where(p => ids.Contains(p.Id));
答案 1 :(得分:1)
首先尝试提取相关的ID:
var accountDetailIds = holder.AccountDetails.Select(a => a.Id);
var holderAccounts = db.AccountDetails
.Include(p => p.BranchDetail)
.Where(p => accountDetailIds.Contains(p.Id));
答案 2 :(得分:0)
我认为您尝试做的与SQL Where-In子句相同。正如Jeffery Khan所提到的,我将提取您要查询的条件,然后在单独的语句中执行查询。希望这个article能帮助您理解用于增强查询可读性的良好实践。