Supposons que j'ai deux classes:propriétés imbriquées Access avec lambda dynamique à l'aide Linq.Expression
class person
{
int ID
string name
Address address
}
class address
{
int ID
string street
string country
}
Ces classes sont plus ou moins donnés, ils sont mis en correspondance via NHibernate pour être honnête :)
Dans une grille (datatables.net comme base) je voudrais avoir un tri indépendant du type.
Par conséquent, je crée une expression 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);
Si je passe personne comme type T et remplacer la « propriété pour trier » avec « nom » il fonctionne très bien (crée un lambda correct). Si la propriété est de trier « address.street » ça ne marchera pas, jetez-moi l'erreur suivante:
Property 'address.street' is not defined for type 'person'
Je ne vois qu'une seule solution à ce jour, mais pas assez clair ... Je voudrais essayer de diviser la chaîne qui contient le nom de propriété (divisé par.)
Quelqu'un peut-il donner une meilleure solution? J'ai besoin d'ajouter le sortExpression à un objet IQueryable query.OrderBy(sortExpression)
.
Je ne sais pas si mon titre est clair, veuillez le corriger.
Merci d'avance.
Étant donné que je ne reçois qu'un objet IQueryable contenant déjà un tas de données, j'ajoute la pagination, etc. Ensuite, je ne charge que les données laissées dans la requête. Ceci est fait par nHibernate. Seulement pour le tri, il ne peut pas être la solution (j'espère) – griti
C'est mon point. DynamicQuery peut déjà faire cela "ajouter le tri à une requête existante." J'ai une solution de démonstration sur mon blog qui fait juste cela. http://blogs.teamb.com/craigstuntz/2009/04/27/38243/ –
oh merci, je vais le lire – griti