Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.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# 在linq中的ORDERBY子句内动态设置键_C#_Linq_Reflection - Fatal编程技术网

C# 在linq中的ORDERBY子句内动态设置键

C# 在linq中的ORDERBY子句内动态设置键,c#,linq,reflection,C#,Linq,Reflection,我需要使用linq在OrderBy子句中设置键,其中键是对象的属性。我身上只带着酒店的名字。如何动态设置属性 class Obj { string Level { get; set; } } List<Obj> objList; objList.OrderByDescending(x => x.Level); => "here i only have property name." 类Obj { 字符串级别 {

我需要使用linq在OrderBy子句中设置键,其中键是对象的属性。我身上只带着酒店的名字。如何动态设置属性

class Obj 
{
    string Level
    {
       get;
       set;
    }
}

List<Obj> objList;

objList.OrderByDescending(x => x.Level); => "here i only have property name."
类Obj
{
字符串级别
{
得到;
设置
}
}
列表对象列表;
objList.OrderByDescending(x=>x.Level);=>“这里我只有财产名称。”
希望有人能帮忙

谢谢
Sunil

您可以通过动态地像

public static IOrderedQueryable<T> OrderByDescending<T>(this IQueryable<T> enumerable, string sortColumn)
{
    var param = Expression.Parameter(typeof(T), "x");
    var mySortExpression = Expression.Lambda<Func<T, object>>(Expression.Property(param, sortColumn), param);
    return enumerable.OrderByDescending(mySortExpression);;
 }
公共静态IOrderedQueryable OrderByDescending(此IQueryable可枚举,字符串sortColumn)
{
var param=表达式参数(类型(T),“x”);
var mySortExpression=Expression.Lambda(Expression.Property(param,sortColumn),param);
返回可枚举的.OrderByDescending(mySortExpression);;
}
订购人呢

public static IOrderedQueryable<T> OrderBy<T>(this IQueryable<T> enumerable, string sortColumn)
{
    var param = Expression.Parameter(typeof(T), "x");
    var mySortExpression = Expression.Lambda<Func<T, object>>(Expression.Property(param, sortColumn), param);
    return enumerable.OrderBy(mySortExpression);;
 }
public static IOrderedQueryable OrderBy(此IQueryable可枚举,字符串sortColumn)
{
var param=表达式参数(类型(T),“x”);
var mySortExpression=Expression.Lambda(Expression.Property(param,sortColumn),param);
返回可枚举的.OrderBy(mySortExpression);;
}
你可以把这两者结合在一起,就像

public static IOrderedQueryable<T> OrderBy<T>(this IQueryable<T> enumerable, string sortColumn, string direction)
{
     var param = Expression.Parameter(typeof(T), "x");
     var mySortExpression = Expression.Lambda<Func<T, object>>(Expression.Property(param, sortColumn), param);

      IOrderedQueryable<T> iQuery;
      switch(direction)
      {
          case "desc": 
            iQuery = enumerable.OrderByDescending(mySortExpression);
            break;
          case "asc":
          default :
            iQuery = enumerable.OrderBy(mySortExpression);
            break;
      }
      return iQuery;
 }
public static IOrderedQueryable OrderBy(此IQueryable可枚举,字符串sortColumn,字符串方向)
{
var param=表达式参数(类型(T),“x”);
var mySortExpression=Expression.Lambda(Expression.Property(param,sortColumn),param);
可查询的iOrdered iQuery;
开关(方向)
{
案例“desc”:
iQuery=enumerable.OrderByDescending(mySortExpression);
打破
案例“asc”:
违约:
iQuery=enumerable.OrderBy(mySortExpression);
打破
}
回归方程;
}
然后您可以像调用升序的那样调用它,如
objList.OrderBy(“Level”,“asc”)
//
objList.OrderBy(“Level”、“desc”)
//用于降序


希望这将有助于对救援的反思。请注意,这可能会很慢。是的,我找到了获取属性名称的方法,键入了,但找不到我需要的内容。可能是因为我不熟悉反射…谢谢你的帮助..但很遗憾,我在.net 3.5中工作,而它不在其中工作。@Sunil,更新了答案,所有方法都适用于.net 3.5..但我使用的是List。3.5中的List是IQueryable还是IEnumerable..我找不到扩展方法。我将该方法添加到静态类中的项目中。但仍然没有显示在列表类中。您是否在文件中包含扩展方法类、命名空间?