C# 动态Linq-在运行时设置orderby表达式类型

C# 动态Linq-在运行时设置orderby表达式类型,c#,dynamic-linq,C#,Dynamic Linq,我正在使用动态Linq并使where子句起作用。现在我想添加orderby子句,但在设置动态表达式的类型时遇到了一个问题。以下是我的工作代码: class MyClass { public string Owner; public DateTime Inserted; } Expression<Func<MyClass, bool>> whereExpression = DynamicExpression.ParseLambda<MyClass,

我正在使用动态Linq并使where子句起作用。现在我想添加orderby子句,但在设置动态表达式的类型时遇到了一个问题。以下是我的工作代码:

class MyClass {
    public string Owner;
    public DateTime Inserted;
}

Expression<Func<MyClass, bool>> whereExpression = DynamicExpression.ParseLambda<MyClass, bool>("owner = \"joe\"");
Expression<Func<MyClass, DateTime>> orderExpression = DynamicExpression.ParseLambda<MyClass, DateTime>("inserted");
var result = from item in table.Where(whereExpression).OrderBy(orderExpression) select item;
result.ToList().ForEach(m => Console.WriteLine("inserted=" + m.Inserted + "."));
class-MyClass{
公共字符串所有者;
插入公共日期时间;
}
表达式,其中Expression=DynamicExpression.ParseLambda(“owner=”joe\”);
表达式orderExpression=DynamicExpression.ParseLambda(“插入”);
var result=from表中的项。其中(whereExpression)。OrderBy(orderExpression)选择项;
result.ToList().ForEach(m=>Console.WriteLine(“inserted=“+m.inserted+”));
因为我需要在orderby表达式中使用不同的属性,所以我希望能够使用下面的代码之类的东西,但这些代码不起作用

Expression<Func<MyClass, bool>> whereExpression = DynamicExpression.ParseLambda<MyClass, bool>("owner = \"joe\"");
Type orderType = typeof(DateTime);
Expression<Func<MyClass, orderType>> orderExpression = DynamicExpression.ParseLambda<MyClass, orderType>("inserted");
var result = from item in table.Where(whereExpression).OrderBy(orderExpression) select item;
result.ToList().ForEach(m => Console.WriteLine("inserted=" + m.Inserted + "."));
Expression其中Expression=DynamicExpression.ParseLambda(“owner=\'joe\”);
类型orderType=typeof(DateTime);
表达式orderExpression=DynamicExpression.ParseLambda(“插入”);
var result=from表中的项。其中(whereExpression)。OrderBy(orderExpression)选择项;
result.ToList().ForEach(m=>Console.WriteLine(“inserted=“+m.inserted+”));

编译器对orderExpression中的行不满意。有什么方法可以在运行时设置Func的类型吗?

看起来动态Linq扩展方法为我解决了所有问题。我把它弄得太难了

var result = from item in table.Where("owner = \"joe\"").OrderBy("inserted") select item;
result.ToList().ForEach(m => Console.WriteLine("inserted=" + m.Inserted + "."));

是的-尽管有一个问题是DynamicLink不允许您使用IComparer进行排序。我对此有点怀疑