这是我需要改变的代码:
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 => x.RowId == id)
,我想将其更改为(x => x.RowId)
,以便我可以在OrderBy
中使用ObjectContext.CreateQuery(T)
{1}}稍后调用的方法。
有没有人知道如何更改上面的代码,以便lambda在OrderBy中用于按ID字段排序是正确的吗?
旁注: RowId来自this._KeyProperty我相信。这是使用Asp.Net MVC上的实体框架的通用存储库的一部分
答案 0 :(得分:3)
只需省略创建常量和“=”:
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&lt; E,bool&gt;到适当的类型。
(已编辑合并asgerhallas和LukLed的好建议)