2010-11-25 21 views
0

J'ai une liste d'objets sur lesquels j'utilise le LINQ dynamique pour effectuer le tri.Trier à l'aide de LINQ dynamique sur un objet complexe

L'objet est comme ça,

public class SampleDTO 
    { 
     public string Vendor { get; set;} 
     public string Invoice { get; set; } 
     .. 
     .. 

} 

Et j'utiliser la bibliothèque dynamique LINQ pour trier ce,

var list= new List<SampleDTO>(); 
list.OrderBy("Vendor"); 

Cela fonctionne bien si je passe une clé de tri avec un nom de propriété valide de la liste (par exemple Fournisseur)

Le problème est, comment faire pour un objet complexe.

Supposons que j'ai un autre objet qui est une propriété de la SampleDTO

public class SampleDTO 
    { 
     public string Vendor { get; set;} 
     public string Invoice { get; set; } 
     public OtherDTO OtherDTO{get;set; } 
     .. 

} 

public class OtherDTO 
{ 
     public string LineId{ get; set;} 
     .. 


} 

Et si je veux faire suffisamment dynamique de tri pour que je devrais pouvoir trier d'une propriété directe du SampleDTO ou sur une propriété d'un OtherDTO (par exemple besoin de trier OtherDTO.LineId)

Quels sont les moyens possibles pour y parvenir?

/BB

Répondre

2

Vous pouvez faire ceci:

list.OrderBy("OtherDTO.LineId"); 
+0

de TKX, juste pris le temps de le tester – Illuminati

+0

Parfois, la solution est tellement évident que vous ne voyez pas :-) – Steven

+0

Comment atteindre dynamiquement le passage ci-dessus lors de l'exécution de la colonne Trier? – msbyuva

4

pourquoi ne pas utiliser la syntaxe lamba.

list.OrderBy(sample => sample.OtherDto.LineId);

Ceci a l'avantage de ne pas être dépendants des chaînes codées en dur

+1

Je suppose qu'il y a une bonne raison pour l'OP d'utiliser LINQ dynamique en premier lieu. – Steven

+0

parce que la colonne sur laquelle je dois trier n'est pas seulement la ligne de commande, elle peut aussi être une autre colonne, c'est pourquoi im utilisant linq dynamique en premier lieu. – Illuminati

+0

@Bumble Bee: Ahh, j'ai mal lu la question initiale. –