c# - LINQ to Entities 不支持 LINQ 表达式节点类型 'Invoke'

标签 c# .net entity-framework linq-to-entities

我正在尝试通过 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/

相关文章:

c# - 单例查找表需要锁吗?

c# - 使用 LinearGradientBrush 填充路径

c# - TripleDES 加密和解密给出奇怪的结果

c# - 如何在服务器上将 url 保存为 html 页面

c# - 在 C# 中处理 SQL 死锁的模式?

c# - 在 30 天内显示图片 ASP.NET

C# 强制打印作业为单面打印(打印机默认为双面打印)

c# - SP 在 EF 5 CF 中有多个结果

c# - 一定数量的数字之间所有可能的组合c#

entity-framework - AWS 上的 .NET Core Entity Framework