C# 将lambda转换为表达式树

C# 将lambda转换为表达式树,c#,linq,expression-trees,C#,Linq,Expression Trees,有人能帮我把下面的语句转换成一系列表达式树调用吗?我要发疯了,想让精选部分发挥作用 results.GroupBy(x => x.EntityID).Select(y => y.OrderBy(o => o.ResultOrder).FirstOrDefault()); 我试着调试并查看inspector中的表达式,但这对我来说毫无意义。我已经找到了一些有用的东西,比如groupby: var groupAssign = Expression.Lambda<Func&l

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

results.GroupBy(x => x.EntityID).Select(y => y.OrderBy(o => o.ResultOrder).FirstOrDefault());
我试着调试并查看inspector中的表达式,但这对我来说毫无意义。我已经找到了一些有用的东西,比如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 }
    );
var groupAssign=Expression.Lambda(ViewEntityIdrop,viewParam);
var=Expression.Call(
类型(可查询),
“群比”,
新类型[]{viewModelType,typeof(int)},
新表达式[]{theBigResultset,groupAssign}
);

我不确定您想在这里实现什么,但有一个工具在这方面一直对我有帮助,它有一个转储扩展方法,您可以将它放在表达式上。您可以像这样将lambda声明为
Expression
,然后对变量使用Dump方法来获得可读的表达式树,该表达式树稍后可用于执行转换。也可能有一些免费的工具可用,但我不知道这些。 在您的情况下,您很可能有:

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

为此,您可以调用Dump方法并获得相应的表达式树。

谢谢,但现在我更困惑了!谁会想到这么一小行代码最终会产生这么多胡言乱语!我得仔细看一看。你到底觉得什么不合情理?