重複の可能性:
ジェネリック拡張メソッド内で文字列列名を使用して IQueryable に OrderBy を適用するにはどうすればよいですか?
childtable を持つ親テーブルを選択するために、LINQ orderby ステートメントを使用しています。ここで、親テーブルと子テーブルを含むすべてのフィールドに orderby を適用したいと考えています。動的列名を使用してこれを達成するにはどうすればよいですか。助けてください...これは私がここで使用したコードです。
result = (from p in StudentDB.Student.Include("Student_addr")
where (p.full_nm.Contains(searchCriteria.Name))
select p);
今、orderbyを適用するための拡張メソッドを呼び出しています...
var stuType = typeof(Student);
var addressType = typeof(Student_addr);
list = result.Order<Student>(stuType , addressType ,searchCriteria.sortColumn, searchCriteria.sortCondition);
return list.Take(searchCriteria.reccount).ToList();
延長方法……
public static IQueryable<T> Order<T>(this IQueryable<T> items, Type stuType , Type addressType, string sortColumn, string sortOrder)
{
var typeOfT = addressType;
var parameter = Expression.Parameter(typeOfT, "parameter");
var propertyType = typeOfT.GetProperty(sortColumn).PropertyType;
var propertyAccess = Expression.PropertyOrField(parameter, sortColumn);
var orderExpression = Expression.Lambda(propertyAccess, parameter);
Expression expression =null;
if (sortOrder == "Desc")
{
expression=Expression.Call(typeof(Queryable), "OrderByDescending", new Type[] { stuType , propertyType }, items.Expression, Expression.Quote(orderExpression));
}
else
{
expression = Expression.Call(typeof(Queryable), "OrderBy", new Type[] { stuType , propertyType }, items.Expression, Expression.Quote(orderExpression));
}
return items.Provider.CreateQuery<T>(expression);
}
子テーブルの列名で実行しているときに、次のようなエラーが発生しました:
型 'System.Linq.Queryable' のジェネリック メソッド 'OrderBy' は、指定された型引数および引数と互換性がありません。メソッドが非ジェネリックの場合は、型引数を指定しないでください。
前もって感謝します...