2009-11-16 20 views
18

Ho fatto una breve ricerca di questo sito e ho cercato su google, ma non riesco a trovare un buon esempio. Sto ancora cercando di capire come funziona tutta "Lambda Expressions".Come ordinare per più colonne usando espressioni lambda VB.Net

Qualcuno può fornirmi un esempio di ordinamento da più colonne utilizzando VB.Net e Linq-to-SQL utilizzando un'espressione lambda?

Ecco il mio codice esistente, che restituisce un elenco ordinato utilizzando una sola colonna per ordinare i risultati:

Return _dbContext.WebCategories.OrderBy(Function(c As WebCategory) c.DisplayOrder).ToList 

Nota: L'oggetto WebCategory ha un oggetto figlio pagina web (in base a una chiave esterna). Vorrei ordinare prima da WebPage.DisplayOrder, poi da WebCategory.DisplayOrder.

Ho provato a concatenare l'ordine, come di seguito, e anche se è stato compilato ed eseguito, non sembra che restituisca i dati nell'ordine che volevo.

Return _dbContext.WebCategories.OrderBy(Function(c As WebCategory) c.DisplayOrder).OrderBy(Function(c As WebCategory) c.WebPage.DisplayOrder).ToList 

Grazie in anticipo.

risposta

39

Ho trovato this MSDN article in una ricerca rapida di Google. Credo che quello che cercate è questo:

Return _dbContext.WebCategories.OrderBy(Function(c As WebCategory) c.DisplayOrder). _ 
ThenBy(Function(c As WebCategory) c.WebPage.DisplayOrder).ToList 
+0

Grazie, è proprio quello che stavo cercando. Quali sono stati i termini di ricerca di Google che hai utilizzato per trovare quell'articolo, se potessi chiedere? – camainc

+1

Wow, stavo facendo (quello che pensavo fosse) esattamente questo e non avrebbe funzionato, stavo ottenendo una specie di eccezione correlata a Linq ... diventando incredibilmente frustrato ... poi ho notato che ho dimenticato l'ultimo ".ToList " parte. So che è ovvio, a posteriori, che deve essere il giusto tipo di dati, ma suppongo che stavo vivendo uno di quei momenti di "foresta per gli alberi". Grazie per l'informazione! – evilspoons

12

Si dovrebbe usare ThenBy come questo:

Return _dbContext.WebCategories.OrderBy(Function(c As WebCategory) c.DisplayOrder) _ 
           .ThenBy(Function(c As WebCategory) c.WebPage.DisplayOrder) _ 
           .ToList() 
+1

Grazie! Hai risposto allo stesso tempo di HuBeZa, ma dal momento che hai già più badge di lui, gli ho dato la risposta. – camainc

+0

BTW: Se è necessario il proprio IComparer, è necessario utilizzarlo due volte (una volta per .OrderBy e una volta per il comando .ThenBy). Aggiungi ', New MyOwnIComparer' e ovviamente il tuo codice per la tua classe con il nome MyOwnIComparer – PeterCo