2011-12-06 13 views
7

Ho una lista che contiene oggetti di tipo dinamico. Quando utilizzo il metodo LINQ OrderBy, viene visualizzato un errore che indica che "oggetto" non contiene una definizione per "Data". Cosa posso fare per ordinare la mia lista entro la data?Come ordinare una lista con oggetti dinamici

List<dynamic> employees = new List<dynamic>(); 

employees.Add(new 
{ 
    ID = 1, 
    Name = "Larry", 
    Date = new DateTime(2010, 10, 1), 
}); 

employees.Add(new 
{ 
    ID = 2, 
    Name = "Clint", 
    Date = new DateTime(2011, 5, 28), 
}); 

employees.Add(new 
{ 
    ID = 3, 
    Name = "Jason", 
    Date = new DateTime(2011, 7, 6), 
}); 

var query = employees.OrderBy(x => x.Date); 
+0

Forse con la riflessione? – Nate

+0

Stai dicendo che le espressioni lambda non supportano le dinamiche? – zmbq

+0

In LinqPad esegue e funziona bene. – okrumnow

risposta

6

È il codice che hai mostrato nello stesso Assembly?

Tipi

anonimi non funzionerà attraverso assemblee, e la "oggetto non contiene questa definizione" errore è un tipico segno di usare un tipo anonimo da due diverse assemblee

(ad esempio, in un ASP.net Pagina MVC il controller può restituire un tipo anonimo come un modello e la vista può provare a usarlo => fa esplodere esattamente con quell'errore)

+0

In effetti il ​​codice è in un altro assembly. Il codice che ho postato è stato un esempio. Sapendo che non funzionerà tra gli assembly, sono stato in grado di modificare il codice che crea l'elenco degli oggetti dinamici da ordinare in base alla data e quindi passare l'elenco ordinato all'assembly che consuma. Grazie per le informazioni! – Halcyon

+0

@Halcyon Cool. Il problema è che i tipi anon sono interni. Ci sono alcuni hack che li avvolgono in una dinamica che consente loro di lavorare su assiemi, ma in effetti è meglio rearchitect la soluzione. –

3

Ho verificato che la query funzioni in .NET 4.0. Ti manca un riferimento a Microsoft.CSharp dal tuo assemblaggio?

Problemi correlati