c# - LINQ 查询错误:无法创建类型的常量值。此上下文仅支持原始类型或枚举类型
问题描述
我有一个对象列表,其中包含List<Contract> endedContracts
已从较大列表中过滤掉的合同信息。我现在正在尝试将此列表中的信息与我的数据库中的记录相匹配,并使用一些进一步的过滤器。
var endedContracts = _contracts
.Where(x => x.Contract.IsContractInLastBillingPeriod(referencePeriod))
.Where(x => x.Contract.IsContractCoveredByLiveInvoices(x.Contract.Invoices)).ToList();
当我运行以下查询时,我得到了错误。
var crystallisedCommissions = _context.Contracts
.Where(x => x.Statement.Sent)
.Where(x => x.Statement.Broker == endedContracts.First().Broker.Code)
.Where(x => !Period.IsPeriodBeforeReferencePeriod(x.Statement.Period, CUT_OFF_PERIOD))
.Where(x => endedContracts.Any(y => y.Contract.Identifier == x.Identifier
&& y.Contract.StartDate == x.ContractStartDate
&& y.Contract.EndDate == x.ContractEndDate)).ToList();
确切的错误:
无法创建“合同”类型的常量值。在此上下文中仅支持原始类型或枚举类型。”
解决方案
endedContracts
是内存中的列表,不能在此查询中直接使用。相反,在查询之外获取您需要的值,例如:
//Get the code here
var brokerCode = endedContracts.First().Broker.Code;
var crystallisedCommissions = _context.Contracts
.Where(x => x.Statement.Sent)
.Where(x => x.Statement.Broker == brokerCode) //Use the code here
.Where(x => !Period.IsPeriodBeforeReferencePeriod(x.Statement.Period, CUT_OFF_PERIOD))
.Where(x => endedContracts.Any(y => y.Contract.Identifier == x.Identifier
&& y.Contract.StartDate == x.ContractStartDate
&& y.Contract.EndDate == x.ContractEndDate)).ToList();
推荐阅读
- reactjs - 在 Reactjs 中选择像 MS Word 这样的表
- javascript - 如何使用 web3.js 在 Truffle 测试中进行基本算术运算
- amazon-web-services - 向 EC2 Spot 实例中断警告添加标签
- android - 如何从 Firebase 存储中的文件夹加载图像并在其他地方使用
- c - C中的重复循环
- typescript - 如何避免实时数据库onWrite触发函数回调迭代数据但数据已更改
- python - 如何对 angr 中的堆副作用应用约束
- enums - 如何将枚举类型的参数传递给 Apex 中的方法?
- windows - 在 Windows Server 2016 上卸载 WebDav 后,它会在一天后恢复活力
- javascript - 视频时长有时为 NaN