Załóżmy, że mam dwie klasy:dostępu zagnieżdżone właściwości z dynamicznym lambda wykorzystujące Linq.Expression
class person
{
int ID
string name
Address address
}
class address
{
int ID
string street
string country
}
Klasy te są bardziej lub mniej podane, są odwzorowywane przez nHibernate szczerze mówiąc :)
W siatce (datatables.net jako podstawa) chciałbym mieć sortowanie niezależne od typu.
Dlatego stworzyłem wyrażenie lambda:
var param = Expression.Parameter(typeof(T), typeof(T).Name);
var sortExpression = Expression.Lambda<Func<T, object>>
(Expression.Convert(Expression.Property(param, "Property to sort"), typeof(object)), param);
Gdybym przekazać osobie jako typ T i zastąpić „obiekt do sortowania” z „nazwą” działa dobrze (tworzy poprawne lambda). Jeśli właściwość sortowania jest „address.street” to nie zadziała, rzucać mi następujący błąd:
Property 'address.street' is not defined for type 'person'
Widzę tylko jedno rozwiązanie do tej pory, ale nie na tyle jasne ... Chciałbym spróbować podzielić ciąg zawierający nazwę właściwości (podzieloną przez)
Czy ktoś może dać lepsze rozwiązanie? Muszę dodać sortExpression do obiektu IQueryable query.OrderBy(sortExpression)
.
Nie jestem pewien, czy mój tytuł jest jasny, proszę go poprawić.
Z góry dziękuję.
Ponieważ otrzymuję tylko obiekt IQueryable, który zawiera już garść danych, dodam stronicowanie i tak dalej, następnie ładuję tylko dane pozostałe w zapytaniu. Odbywa się to za pomocą nHibernate. Tylko dla sortowania nie może to być rozwiązanie (mam nadzieję). – griti
To jest moja uwaga. DynamicQuery może już to zrobić "dodaj sortowanie do istniejącego zapytania". Mam na moim blogu rozwiązanie demonstracyjne, które właśnie to robi. http://blogs.teamb.com/craigstuntz/2009/04/27/38243/ –
o dzięki, przeczytam przez to – griti