MVC3,Entity Framework 4.1代碼優先。用於排序導航屬性的動態LINQ表達式
與2個表
模型工作:
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
}
用於分揀動態表達(只是爲了避免開關case語句):
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;
}
該頁面顯示的網格具有兩個使用webgrid的專欄名稱和大學名稱。對於「程序名稱」列,排序工作正常,但如果按大學名稱排序,則會失敗,因爲此屬性位於UniversityMaster中,並且Expression.PropertyOrField在ProgramMaster中搜索此屬性。這裏是個例外:
University.UniversityName「不是類型的成員」 App.Core.Model.ProgramMaster
我的問題是如何使這項工作對我的模型類的導航性能。
希望我能解釋這種情況。任何幫助表示讚賞。