1

运行此查询:

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

我究竟做错了什么?

4

3 回答 3

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));
于 2013-03-12T18:37:13.970 回答
1

尝试先提取相关 ID:

var accountDetailIds = holder.AccountDetails.Select(a => a.Id);
var holderAccounts = db.AccountDetails
    .Include(p => p.BranchDetail)
    .Where(p => accountDetailIds.Contains(p.Id));
于 2013-03-12T18:39:44.173 回答
0

我认为您尝试做的与 SQL Where-In 子句相同。正如 Jeffery Khan 提到的,我将提取您要查询的条件,然后在单独的语句中执行查询。希望本文能帮助您了解这种用于增强查询可读性的良好做法。

于 2013-03-12T18:47:38.363 回答