我正在尝试通过 lambda 表达式在我的 EF 查询中实现“IN”子句,如下所示:
/*lambda expression to evaluate: status in[a, b, c...n]*/
_IN myIN = (allStatus, status) =>
{
bool lambdaResult = false;
foreach (int s in statuses)
{
if (status == s)
{
lambdaResult = true;
break;
}
}
return lambdaResult;
};
result = (from v in _entity.CAVouchers
join vs in _entity.CAVoucherStatus.Where(vs => (myIN(statuses, vs.VoucherStatusId) == true)) on v.VoucherStatusId equals vs.VoucherStatusId
join vsr in _entity.CAVoucherStatusReason on v.VoucherStatusReasonId equals vsr.VoucherStatusReasonid
where v.CyberAgent.CAID == caid
select new ACPVoucher()
{
...
}).ToList();
由于“where”条件,这将引发“LINQ to Entities 不支持 LINQ 表达式节点类型‘Invoke’”错误。 基本上我需要的是一种“where statusId in [1, 2, 3]”的子句。
什么是失败的?...关于如何做到这一点的任何提示?当应用于通用列表时,同样的方法对我有用。
谢谢
最佳答案
你可以只做一个包含查询:
where statuses.Contains(vs.VoucherStatusId)
关于c# - LINQ to Entities 不支持 LINQ 表达式节点类型 'Invoke',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5586983/