Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用动态生成的Lambda作为Linq OrderBy的输入_C#_Linq_Sorting_Lambda - Fatal编程技术网

C# 使用动态生成的Lambda作为Linq OrderBy的输入

C# 使用动态生成的Lambda作为Linq OrderBy的输入,c#,linq,sorting,lambda,C#,Linq,Sorting,Lambda,我想通过编程创建Linq OrderBy子句。因此,我尝试动态创建lambda,并将它们用作OrderBy子句的输入,但它不起作用。不确定OrderBy的实际输入是什么 我错过了什么 static void Main(string[] args) { List<Person> people = new List<Person>(); people.Add(new Person { Age = 10, Name = "D" }

我想通过编程创建Linq OrderBy子句。因此,我尝试动态创建lambda,并将它们用作OrderBy子句的输入,但它不起作用。不确定OrderBy的实际输入是什么

我错过了什么

    static void Main(string[] args)
    {
        List<Person> people = new List<Person>();
        people.Add(new Person { Age = 10, Name = "D" });
        people.Add(new Person { Age = 20, Name = "C" });
        people.Add(new Person { Age = 30, Name = "B" });
        people.Add(new Person { Age = 40, Name = "A" });

        var paramExpr = Expression.Parameter(typeof(Person), "p");
        var prop = Expression.Property(paramExpr, "Name");

        var lambdaExpr = Expression.Lambda(prop, new List<ParameterExpression>() { paramExpr });
        Console.WriteLine(lambdaExpr); //Outputs p => p.Name


        var sortedPeople = people.OrderBy(lambdaExpr.Compile()); //This doesn't work.
        //var sortedPeople = people.OrderBy(p => p.Name); //This works

        foreach (var person in sortedPeople)
        {
            Console.WriteLine(String.Format("{0} - {1}", person.Name, person.Age));
        }

        Console.ReadKey();
    }
static void Main(字符串[]args)
{
列表人员=新列表();
添加(新的人{Age=10,Name=“D”});
添加(新的人{Age=20,Name=“C”});
添加(新的人{Age=30,Name=“B”});
添加(新的人{Age=40,Name=“A”});
var paramExpr=表达式参数(typeof(Person),“p”);
var prop=Expression.Property(paramExpr,“Name”);
var lambdaExpr=Expression.Lambda(prop,new List(){paramExpr});
Console.WriteLine(lambdaExpr);//输出p=>p.Name
var sortedPeople=people.OrderBy(lambdaExpr.Compile());//这不起作用。
//var sortedPeople=people.OrderBy(p=>p.Name);//这很有效
foreach(分类人员中的var人员)
{
WriteLine(String.Format(“{0}-{1}”,person.Name,person.Age));
}
Console.ReadKey();
}

刚刚找到答案。Lambda表达式的类型必须为Func

var lambdaExpr = Expression.Lambda<Func<Person, object>>(prop, new List<ParameterExpression>() { paramExpr });
var lambdaExpr=Expression.Lambda(prop,new List(){paramExpr});

那就一切都好了

你说“不行”是什么意思?它不编译吗?它是否在运行时引发异常?是否引发运行时异常。以下是Stackoverflow建议的一个相关问题的答案。