gpt4 book ai didi

c# - 如何将 LambdaExpression 转换为类型化的 Expression>

转载 作者:可可西里 更新时间:2023-11-01 02:59:18 24 4
gpt4 key购买 nike

我正在为 nHibernate 动态构建 linq 查询。

由于依赖关系,我想稍后再转换/检索类型化的表达式,但到目前为止我一直没有成功。

这是行不通的(强制转换应该发生在其他地方):

var funcType = typeof (Func<,>).MakeGenericType(entityType, typeof (bool));
var typedExpression = (Func<T, bool>)Expression.Lambda(funcType, itemPredicate, parameter); //Fails

这是有效的:

var typedExpression = Expression.Lambda<Func<T, bool>>(itemPredicate, parameter);

是否可以从 LambdaExpression 中获取“封装”类型的表达式?

最佳答案

var typedExpression =
(Func<T, bool>)Expression.Lambda(funcType, itemPredicate, parameter); //Fails

这并不奇怪,因为您必须 Compile 一个LambdaExpression为了获得可以调用的实际委托(delegate)(这就是 Func<T, bool> 是什么)。

所以这可行,但我不确定它是否是您需要的:

// This is no longer an expression and cannot be used with IQueryable
var myDelegate =
(Func<T, bool>)
Expression.Lambda(funcType, itemPredicate, parameter).Compile();

如果您不想编译表达式而是移动表达式树,那么解决方案是转换为 Expression<Func<T, bool>>。 :

var typedExpression = (Expression<Func<T, bool>>) 
Expression.Lambda(funcType, itemPredicate, parameter);

关于c# - 如何将 LambdaExpression 转换为类型化的 Expression<Func<T, T>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16213005/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com