2016-12-07 2 views
-3

У меня есть куча классов POCO, позволяет сказать, что один из них выглядит, как показано нижеC# Lambda с Generic класса Т

class Person{ 
     public string Name {get;set;} 
     public int Age {get;set;} 
} 

вот мой общий класс,

class Helper<T> where T:class{ 

    public Func<IQueryable<T>, IOrderedQueryable<T>> GenerateOrderByExpression(string colName) 
    { 
    return x => x.OrderByDescending(y => y.colName); 
    //colName = NAME can be here for class person, it can be the Age field or something else for some other classes 
    //how do i become generic here, how can I be able to use which ever field i pass as colName 

    } 

} 
+0

Вам нужно будет использовать отражение и создать «выражение» для использования в вашем «OrderByDescending». Но какую проблему вы решаете, делая это? Вероятно, есть лучшая альтернатива. – juharr

+1

вы должны изучить динамический linq - он делает именно это. –

+0

@juharr: «LINQ to Entities не распознает метод« System.Reflection.PropertyInfo GetProperty (System.String) », и этот метод не может быть переведен в выражение хранилища». – ishahrier

ответ

-4

Вы можете использовать отражение для проверьте, существует ли colName и получает его значение. Проверьте страницу MSDN - https://msdn.microsoft.com/en-us/library/mt656691.aspx.

+1

Это будет работать только для коллекции памяти, а не для запроса базы данных, как у OP. – Servy

Смежные вопросы