var query = dbSet.Where(where); var property = typeof(TEntity).GetProperty(page.Order); if (property != null) { var parameter = Expression.Parameter(typeof(TEntity), "p"); var propertyAccess = Expression.MakeMemberAccess(parameter, property); var orderByExp = Expression.Lambda(propertyAccess, parameter); string methodName = page.isDesc ? "OrderByDescending" : "OrderBy"; MethodCallExpression resultExp = Expression.Call(typeof(Queryable), methodName, new Type[] { typeof(TEntity), property.PropertyType }, query.Expression, Expression.Quote(orderByExp)); query = query.Provider.CreateQuery<TEntity>(resultExp); }
上面是项目中底层分页方法中处理动态排序的代码。现在想改成所有分页都按表的第一个字段来排序,也就是生成的SQL语句是 SELECT * FROM talbe ORDER BY 1 desc
或者怎么样找到主键然后按照主键来排序。
你是要从TEntity找到设置的主键字段吗 一般主键使用[Key]特性标识 可以通过反射获取TEntity的CustomerAttribute集合找到包含Key的字段
是的, 有[Key]特性标识,,可是怎么获取