C# 需要帮助为Enumerable.GroupBy创建Linq.Expression吗

C# 需要帮助为Enumerable.GroupBy创建Linq.Expression吗,c#,linq,.net-3.5,linq-to-objects,expression,C#,Linq,.net 3.5,Linq To Objects,Expression,我试图生成一个表达式树,它最终调用可枚举类型上的一系列GroupBy方法 以简化的形式,我尝试这样做: IEnumerable<Data> list = new List<Data>{new Data{Name = "A", Age=10}, new Data{Name = "A", Age=12}, new Data{Name = "B", Age=20}, new Data{Name="C", Age=15}}; Expression data =

我试图生成一个表达式树,它最终调用可枚举类型上的一系列GroupBy方法

以简化的形式,我尝试这样做:

IEnumerable<Data> list = new List<Data>{new Data{Name = "A", Age=10},
   new Data{Name = "A", Age=12},
   new Data{Name = "B", Age=20},
   new Data{Name="C", Age=15}};

Expression data = Expression.Parameter(typeof(IEnumerable<Data>), "data");
Expression arg = Expression.Parameter(typeof(Data), "arg");
Expression nameProperty = Expression.PropertyOrField(arg, "Name");

Expression group = Expression.Call(typeof(Enumerable), "GroupBy", new Type[] { typeof(Data), typeof(string) }, data, nameProperty);
IEnumerable list=new list{new Data{Name=“A”,Age=10},
新数据{Name=“A”,年龄=12},
新数据{Name=“B”,年龄=20},
新数据{Name=“C”,年龄=15};
表达式数据=表达式参数(typeof(IEnumerable),“数据”);
Expression arg=Expression.Parameter(数据类型),“arg”);
Expression nameProperty=Expression.PropertyOrField(arg,“Name”);
表达式组=Expression.Call(typeof(可枚举),“GroupBy”,新类型[]{typeof(数据),typeof(字符串)},数据,nameProperty);
最后对Expression.call的调用抛出“System.Linq.Enumerable”类型上的“无方法”GroupBy与提供的参数兼容。”

我正在做一件类似的事情,以类似的方式使用
Enumerable.OrderBy
成功地解决了这个问题


非常感谢您的帮助。

您不需要将lambda作为第二种类型传入吗?像这样

    public void Test()
    {
        IEnumerable<Data> list = new List<Data>
        {
            new Data{Name = "A", Age=10},
            new Data{Name = "A", Age=12},
            new Data{Name = "B", Age=20},
            new Data{Name= "C", Age=15}
        };


        var data = Expression.Parameter(typeof(IEnumerable<Data>), "data");
        var arg = Expression.Parameter(typeof(Data), "arg");
        var nameProperty = Expression.PropertyOrField(arg, "Name");
        var lambda = Expression.Lambda<Func<Data, string>>(nameProperty, arg);

        var expression = Expression.Call(
            typeof(Enumerable),
            "GroupBy", 
            new Type[] { typeof(Data), typeof(string) },
            data,
            lambda);

        //expected = {data.GroupBy(arg => arg.Name)}
    }
公共无效测试()
{
IEnumerable list=新列表
{
新数据{Name=“A”,年龄=10},
新数据{Name=“A”,年龄=12},
新数据{Name=“B”,年龄=20},
新数据{Name=“C”,年龄=15}
};
变量数据=表达式参数(typeof(IEnumerable),“数据”);
var arg=表达式参数(typeof(Data),“arg”);
var nameProperty=Expression.PropertyOrField(arg,“Name”);
var lambda=Expression.lambda(nameProperty,arg);
var expression=expression.Call(
类型(可枚举),
“群比”,
新类型[]{typeof(数据),typeof(字符串)},
数据,
lambda);
//应为{data.GroupBy(arg=>arg.Name)}
}