0

重複の可能性:
ジェネリック拡張メソッド内で文字列列名を使用して 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' は、指定された型引数および引数と互換性がありません。メソッドが非ジェネリックの場合は、型引数を指定しないでください。

前もって感謝します...

4

0 に答える 0