MVC3、Entity Framework 4.1のコードが最初です。ソートナビゲーションプロパティの動的LINQ式
2つのテーブル
モデルでの作業:ページが2でグリッドを表示している
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;
}
:
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文を回避するため)カラムwebgridを使用したプログラム名と大学名。 Program Name列のソート作業は問題ありません。ただし、UniversityMasterで分類されている場合は失敗し、ProgramMasterではExpression.PropertyOrFieldがこのプロパティを検索します。ここでは例外がある:
University.UniversityNameは「型のメンバではありません」App.Core.Model.ProgramMaster
私の質問は、私は私のモデルクラスのナビゲーションプロパティのためにこの作業を行う方法です。
私はシナリオを説明することができました。どんな助けもありがとうございます。