【发布时间】:2018-05-14 21:50:24
【问题描述】:
考虑下面的伪代码
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。但这不是我的确切情况。我需要在我的选择子句中包含一个现有的表达式。这个表达式是函数调用的结果。所以我必须在我的选择子句中使用expr。
怎么做?
【问题讨论】:
标签: c# entity-framework linq