代码之家  ›  专栏  ›  技术社区  ›  byte_slave

动态创建lambda表达式+linq+orderbyDescending

  •  2
  • byte_slave  · 技术社区  · 16 年前

    如何创建一个动态lambda表达式,以便在linq内部的orderby函数中使用?

    我基本上想要转换 queryResults.OrderByDescending(); 在里面 queryResults.OrderByDescending(myCustomGeneratedLambdaExp); 哪里 myCustomGeneratedLambdaExp 应为包含 x => x.name .

    谢谢

    2 回复  |  直到 8 年前
        1
  •  4
  •   jpbochi    8 年前

    我不确定您到底在哪里需要动态lambda表达式。无论如何,动态生成lambda表达式的最佳方法是使用表达式树。下面是关于这个主题的两个很好的教程:

    此代码生成的lambda表达式与您请求的表达式类似(“x=>x.name”):

    MemberInfo member = typeof(AClassWithANameProperty).GetProperty("Name");
    
    //Create 'x' parameter expression
    ParameterExpression xParameter = Expression.Parameter(typeof(object), "x");
    
    //Create body expression
    Expression body = Expression.MakeMemberAccess(targetParameter, member);
    
    //Create and compile lambda
    var lambda = Expression.Lambda<LateBoundGetMemberValue>(
        Expression.Convert(body, typeof(string)),
        targetParameter
    );
    return lambda.Compile();
    

    希望这有帮助

        2
  •  2
  •   Community Mohan Dere    8 年前

    Dynamic LINQ

    或者,可以使用switch语句、反射或 dynamic 键入c 4以基于提供的字段名返回值。

    这件事也已经做到死了 previously

    推荐文章