在这个实现中,我们必须实体“公司”和“公司”。连接到数据库后,我使用 LINQ to SQL 设计器创建实体对象。公司实体的主页是显示它所属的公司;所以在网格中我们将有这些列:
公司名称 | 公司名称 | 描述
company 表只有公司 ID,没有公司名称;但是 LINQ 提供了加载公司对象和访问公司记录名称的能力。
由于对网格列启用了排序,因此用户可以单击列以按该列(DESC 或 ASC)对结果进行排序
排序适用于CompanyName和Description但不适用于 * CorporateName *!
下面是对网格数据进行排序的代码
var entityType = typeof(Entities.Company);
//load company list based on Business Unit selected
var companyList = LoadCompanyRecords());// return type IQueryable<Entities.Company>
//if filters are used -> filter the results
companyList = FilterResults(companyList);//return type is IQueryable<Entities.Company>
// order by work flow starts
const string ascSortMethodName = "OrderBy";
const string descSortMethodName = "OrderByDescending";
var sortMethod = ascSortMethodName;
var orderdirection = GetSortDirection(e.SortExpression);
if (orderdirection == "DESC")
sortMethod = descSortMethodName;
//var entityType = typeof(Entities.Company);
var property = entityType.GetProperty(e.SortExpression);
var parameter = Expression.Parameter(entityType, "p");
var propertyAccess = Expression.MakeMemberAccess(parameter, property);
var orderByExp = Expression.Lambda(propertyAccess, parameter);
MethodCallExpression resultExp = Expression.Call(
typeof(Queryable),
sortMethod,
new Type[] { entityType, property.PropertyType },
companyList.Expression,
Expression.Quote(orderByExp));
var result = companyList.Provider.CreateQuery<Entities.Company>(resultExp);
gvAssets.DataSource = result;
gvAssets.DataBind();
有没有人遇到过这个?以及对不属于当前实体的列进行排序的最佳方法是什么?还是我应该考虑编写一个 sql 连接查询或者可能是一个存储过程?
我很感激任何帮助。