如何在 select 子句中使用表达式

考虑以下伪代码


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 to Entities 不支持 LINQ 表达式的节点类型“调用”。


我阅读了在 Select 语句中调用表达式 - LINQ to Entity Framework。但这不是我的确切情况。我需要在我的 select 子句中包含一个现有的表达式。这个表达式是函数调用的结果。所以我必须expr在我的 select 子句中使用。


如何做呢 ?


子衿沉夜
浏览 191回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP