将lambda转换为表达式树

本文关键字:表达式 转换 lambda | 更新日期: 2023-09-27 18:14:10

有人能帮我把下面的语句转换成一系列的表达式树调用吗?我要发疯了,试图让选择部分工作。

results.GroupBy(x => x.EntityID).Select(y => y.OrderBy(o => o.ResultOrder).FirstOrDefault());

我试着调试并查看检查器中的表达式,但它对我来说毫无意义。我已经完成了一些工作,比如groupby:

var groupAssign = Expression.Lambda<Func<TransViewModel, int>>(viewEntityIDProp, viewParam);
var grouped = Expression.Call(
    typeof (Queryable),
    "GroupBy",
    new Type[] { viewModelType, typeof(int) },
    new Expression[] { theBigResultset, groupAssign }
    );

将lambda转换为表达式树

我不确定您在这里想要实现什么,但是有一个工具总是帮助我完成这些事情是Linqpad,它有一个转储扩展方法,您可以将其放在表达式上。您可以将这样的lambdas声明为Expression<Func<T, TResult>>,然后在变量上使用Dump方法来获得可读的表达式树,该表达式树以后可用于执行转换。可能也有一些免费的工具,但我不知道这些。在你的情况下,你很可能有一个:

Expression<Func<IEnumerable<TransViewModel>, IEnumerable<TransViewModel>>> stuff = results => results.GroupBy(x => x.EntityID).Select(y => y.OrderBy(o => o.ResultOrder).FirstOrDefault());

您可以调用Dump方法获取相应的表达式树