0

次の疑似コードを検討してください

Expression<Func<E,Datetime?>> expr = 
    e => (e.d1 ?? e.Rel.d1) ?? e.d2;
var q = myContext.E_DbSet.Select(x => new someDeclaredType {
    Id = x.Id,
    V = expr
});

=> CS0029 型 'System.Linq.Expressions.Expression>' を 'System.DateTime?' に暗黙的に変換できませんか?

コンパイルしてみると

Expression<Func<E,Datetime?>> expr = 
    (e => (e.d1 ?? e.Rel.d1) ?? e.d2).Compile();
var q = myContext.E_DbSet.Select(x => new someDeclaredType {
    Id = x.Id,
    V = expr(x)
});

=> NotSupportedException: LINQ 式のノード タイプ 'Invoke' は、LINQ to Entities ではサポートされていません。

Invoke an Expression in a Select statement - LINQ to Entity Frameworkを読みました。しかし、これは私の正確なケースではありません。select 句に既存の式を含める必要があります。この式は、関数呼び出しの結果として得られます。したがってexpr、select 句で使用する必要があります。

どうすればできますか?

4

2 に答える 2