无法在linq查询中创建常数值

本文关键字:创建 常数值 查询 linq | 更新日期: 2023-09-27 18:03:45

运行此查询:

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

我做错了什么?

无法在linq查询中创建常数值

尝试先提取相关id:

var accountDetailIds = holder.AccountDetails.Select(a => a.Id);
var holderAccounts = db.AccountDetails
    .Include(p => p.BranchDetail)
    .Where(p => accountDetailIds.Contains(p.Id));

很可能不支持Any()。试试这个查询:

var ids = holder.AccountDetails.Select(x => x.Id).ToList();
var holderAccounts = db.AccountDetails.Include(p => p.BranchDetail)
           .Where(p => ids.Contains(p.Id));

我认为你要做的是与SQL Where-In子句相同。正如Jeffery Khan所提到的,我会提取您将要查询的标准,然后在单独的语句中执行查询。希望本文能够帮助您理解这种用于增强查询可读性的良好实践。