1

实体框架出现异常:System.NotSupportedException:无法创建“”类型的常量值。此上下文仅支持原始类型或枚举类型。

using (var ctx = ContextManager.GetContext())
{
    var executions = from e in ctx.Executions
                     join o in ctx.Outputs on e.ExecutionID equals o.ExecutionID into outputs
                     where e.Status == (int)ExecutionStatus.Pending &&
                                        outputs.All(o => o.Status != (int)OutputStatus.InProcess && o.Status != (int)OutputStatus.New)
                     select e;
}

我想要的只是没有新的或正在进行的输出的执行。我怎样才能以不同的方式编写它以便它可以工作?

4

1 回答 1

3

将枚举投射到查询之外并仅引用 int 变量。SQL 生成器的表达式很可能试图将这些转换解释为要转换为 SQL 的东西,而不是要在内存中评估的东西。

例如:

int p = (int)ExecutionStatus.Pending;
int i = (int)OutputStatus.InProcess;
int n = (int)OutputStatus.New;

using (var ctx = ContextManager.GetContext())
{
        var executions = from e in ctx.Executions
                         join o in ctx.Outputs on e.ExecutionID equals o.ExecutionID into outputs
                         where e.Status == p &&
                                            outputs.All(o => o.Status != i && o.Status != n)
                         select e;
}

编辑:尝试改变你的复杂输出。所有(条件正常

where e.Status == p && o => o.Status != i && o.Status != n
于 2013-10-17T12:59:04.557 回答