次の疑似コードを検討してください
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 句で使用する必要があります。
どうすればできますか?