【问题标题】:Troubles creating a proper lambda expression创建正确的 lambda 表达式的麻烦
【发布时间】:2009-11-07 21:07:51
【问题描述】:

这是我需要修改的代码:

var xParam = Expression.Parameter(typeof(E), typeof(E).Name);
MemberExpression leftExpr = MemberExpression.Property(xParam, this._KeyProperty);
Expression rightExpr = Expression.Constant(id);
BinaryExpression binaryExpr = MemberExpression.Equal(leftExpr, rightExpr);
//Create Lambda Expression for the selection
Expression<Func<E, bool>> lambdaExpr = Expression.Lambda<Func<E, bool>>(binaryExpr, new ParameterExpression[] { xParam });

现在我从中得到的表达式是(x =&gt; x.RowId == id),我想将其更改为(x =&gt; x.RowId),以便我可以在OrderBy 中使用它,以便稍后调用ObjectContext.CreateQuery(T) 方法.

有谁知道如何更改上述代码,以便在 OrderBy 中正确使用 lambda 以按 ID 字段排序?

旁注:我相信 RowId 来自 this._KeyProperty。这是使用 Asp.Net MVC 上的实体框架的通用存储库的一部分

【问题讨论】:

    标签: c# asp.net-mvc entity-framework lambda


    【解决方案1】:

    只需省略创建常量和“=”:

      var xParam = Expression.Parameter(typeof(E), "x");
      var propertyAccessExpr = Expression.Property(xParam, this._KeyProperty);
      var lambdaExpr = Expression.Lambda<Func<E, bool>>(propertyAccessExpr, xParam);
    

    这假定 _KeyProperty 的类型为“bool”。如果它有不同的类型,只需将 Func 更改为适当的类型即可。

    编辑以纳入 asgerhallas 和 LukLed 的好建议)

    【讨论】:

    • 我相信它应该是 Func 或类似的东西。
    • 我认为您可以将 var lambdaExpr = Expression.Lambda>(propertyAccessExpr, new ParameterExpression[] { xParam }) 更改为 var lambdaExpr = Expression.Lambda>(propertyAccessExpr, xParam);您不必创建 ParameterExpression 数组。
    • @LukLed 你是对的。原始代码有“新的ParameterExpression []”,我就离开了。我会更新答案。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    相关资源
    最近更新 更多