MVC3, Khuôn khổ thực thể 4.1 Mã đầu tiên.Biểu thức LINQ động để sắp xếp thuộc tính điều hướng
Làm việc với 2 bảng
mẫu:
public class UniversityMaster
{
[Key]
public string UniversityId { get; set; }
public string UniversityName { get; set; }
}
public class ProgramMaster
{
[Key]
public string ProgramId { get; set; }
public string ProgramName { get; set; }
public string UniversityId { get; set; }
public virtual UniversityMaster University { get; set; } // navigation property
}
động biểu để phân loại (chỉ để tránh một tuyên bố trường hợp chuyển đổi):
public virtual IQueryable<ProgramMaster> GetQueryableSort(string sortField="", string sortDirection="")
{
IQueryable<ProgramMaster> query = _dbSet;
ParameterExpression pe = Expression.Parameter(typeof(ProgramMaster), string.Empty);
MemberExpression property = Expression.PropertyOrField(pe, sortField);
//get a exception here if the sort field is of navigation property (University.UniversityName)
LambdaExpression lambda = Expression.Lambda(property, pe);
if (sortDirection == "ASC")
orderbydir = "OrderBy";
else
orderbydir = "OrderByDescending";
MethodCallExpression call = Expression.Call(typeof(Queryable),
orderbydir, new Type[] { typeof(TEntity), property.Type }, query.Expression, Expression.Quote(lambda));
var returnquery = (IOrderedQueryable<ProgramMaster>)query.Provider.CreateQuery<ProgramMaster>(call);
return returnquery;
}
Các trang được hiển thị một mạng lưới với hai cột Tên chương trình và tên trường đại học sử dụng webgrid. Việc phân loại hoạt động tốt cho cột Tên chương trình, tuy nhiên không thành công nếu được sắp xếp theo tên trường đại học vì thuộc tính này nằm trong UniversityMaster và Expression.PropertyOrField tìm kiếm thuộc tính này trong ProgramMaster. Dưới đây là những ngoại lệ:
University.UniversityName 'không phải là một thành viên của loại' App.Core.Model.ProgramMaster
Câu hỏi của tôi là làm thế nào tôi thực hiện tác phẩm này với bất động sản chuyển hướng của lớp mô hình của tôi .
Hy vọng tôi đã có thể giải thích kịch bản. Bất kỳ trợ giúp được đánh giá cao.