1

Entity Framework が例外を取得しています: 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;
}

編集: 複雑な outputs.All( 状態を通常の状態に変更してみてください

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