小编dtr*_*yan的帖子

具有通用memberepressation的多个排序

编辑2019-01-31:最新解决方案

我已经按照这里这里的示例创建了一个带有memberexpressions的泛型排序,但我无法弄清楚我应该如何添加一个"ThenBy"子句,或者在methodcallexpression中组合多个列进行排序.理想情况下,ThenBy应该在跳过之前进行,但它不能,因为它无法看到我使用methodcallexpression创建的orderby子句.GridSortExpression是一个Telerik类 - 它只描述了查询应该排序的列和方向.

任何人都能解释一下吗?这就是我现在所拥有的:

Dim exp As Expressions.Expression(Of Func(Of Product_Catalog, Boolean)) = PredicateBuilder.True(Of Product_Catalog)()
exp = exp.And(Function(e) e.Chapter_Price > 30)
Dim sortExpression As New List(Of GridSortExpression)({New GridSortExpression() With {.SortOrder = GridSortOrder.Descending, .FieldName = "Id"}})
If sortExpression.Count = 0 Then
     catalogList = con.Product_Catalogs.AsExpandable.Where(exp).OrderBy(Function(o) o.Item_Type).ThenBy(Function(o) o.Item_Description).Skip(startRowIndex).Take(maximumRows).ToList
Else
     Dim param As ParameterExpression = Expression.Parameter(GetType(Product_Catalog), String.Empty)
     Dim prop As MemberExpression = Expression.PropertyOrField(param, sortExpression(0).FieldName)
     Dim sort As LambdaExpression = Expression.Lambda(prop, param)
     Dim source = con.Product_Catalogs.AsExpandable.Where(exp)
     Dim resultExp As MethodCallExpression …
Run Code Online (Sandbox Code Playgroud)

linq vb.net asp.net

6
推荐指数
1
解决办法
555
查看次数

如何从MemberExpression创建lambda表达式

我的最终目标是遍历lambda表达式中的嵌套属性,并确定是否有任何属性为null,但是我在创建基于成员表达式的新lambda表达式时遇到了问题.

采取这种虚拟方法:

public static void DoStuff<TModelDetail, TValue>(Expression<Func<TModelDetail, TValue>> expr, TModelDetail detail)
{
    var memberExpression = expr.Body as MemberExpression;
    if (memberExpression == null && expr.Body is UnaryExpression)
    {
        memberExpression = ((UnaryExpression)expr.Body).Operand as MemberExpression;
    }

    var pe = Expression.Parameter(typeof(TModelDetail), "x");
    var convert = Expression.Convert(memberExpression, typeof(object));
    var wee = Expression.Lambda<Func<TModelDetail, object>>(convert, pe);
    var hey = wee.Compile()(detail);            
}
Run Code Online (Sandbox Code Playgroud)

在Compile.exec行上,我收到以下错误:

从范围''引用的'Blah'类型的变量'x',但它没有定义

其中Blah是TModelDetail的类型.

如何使用MemberExpression构建lambda?我最终想要做的是递归地找到根成员表达式,确定它是否为null,并冒泡并确定每个后续成员表达式是否为空.

c# lambda

5
推荐指数
1
解决办法
537
查看次数

标签 统计

asp.net ×1

c# ×1

lambda ×1

linq ×1

vb.net ×1