linq orderby不在子表上使用动态值

时间:2012-12-11 14:38:40

标签: c# linq

  

可能重复:
  How do I apply OrderBy on an IQueryable using a string column name within a generic extension method?

我正在使用LINQ orderby语句来选择带有子表的父表。现在我想在包括父表和子表在内的所有字段中应用orderby。如何使用动态列名实现此目的。请帮帮我......这是我在这里使用的代码。

result = (from p in StudentDB.Student.Include("Student_addr")
                                  where (p.full_nm.Contains(searchCriteria.Name))
                                  select p);

现在我正在调用应用orderby的扩展方法......

var stuType = typeof(Student);
                    var addressType = typeof(Student_addr);
                    list = result.Order<Student>(stuType , addressType ,searchCriteria.sortColumn, searchCriteria.sortCondition);

return  list.Take(searchCriteria.reccount).ToList();

扩展方法......

public static IQueryable<T> Order<T>(this IQueryable<T> items, Type stuType , Type addressType, string sortColumn, string sortOrder)
        {
            var typeOfT = addressType;
            var parameter = Expression.Parameter(typeOfT, "parameter");
            var propertyType = typeOfT.GetProperty(sortColumn).PropertyType;
            var propertyAccess = Expression.PropertyOrField(parameter, sortColumn);
            var orderExpression = Expression.Lambda(propertyAccess, parameter);

            Expression  expression =null;
            if (sortOrder == "Desc")
            {
                expression=Expression.Call(typeof(Queryable), "OrderByDescending", new Type[] { stuType , propertyType }, items.Expression, Expression.Quote(orderExpression));
            }
            else
            {
                expression = Expression.Call(typeof(Queryable), "OrderBy", new Type[] { stuType , propertyType }, items.Expression, Expression.Quote(orderExpression));
            }
            return items.Provider.CreateQuery<T>(expression);
        } 

当我在子表列名上运行时,我得到了错误:follos:

类型'System.Linq.Queryable'上没有泛型方法'OrderBy'与提供的类型参数和参数兼容。如果方法是非泛型的,则不应提供类型参数。

提前致谢...

0 个答案:

没有答案