2011-12-06 26 views
7

Tengo una lista que contiene objetos de tipo dinámico. Cuando uso el método LINQ OrderBy, aparece un error que dice que 'object' no contiene una definición para 'Date'. ¿Qué puedo hacer para ordenar mi lista por fecha?Cómo ordenar una lista con objetos dinámicos

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

¿Quizás con reflejo? – Nate

+0

¿Está diciendo que las expresiones lambda no son compatibles con la dinámica? – zmbq

+0

En LinqPad se ejecuta y funciona bien. – okrumnow

Respuesta

6

¿El código que ha mostrado en el mismo Ensamble?

Tipos

anónimos no funcionarán a través de conjuntos, y el "objeto no contiene esta definición" error es una señal típica de la utilización de un tipo anónimo a partir de dos conjuntos diferentes

(por ejemplo, en un ASP.net Página MVC: el Controlador puede devolver un tipo anónimo como modelo y la Vista puede tratar de usarlo => explota exactamente con ese error)

+0

De hecho, el código está en otro ensamblaje. El código que publiqué fue un ejemplo. Sabiendo que no funcionará en los ensamblajes, pude modificar el código que crea la lista de objetos dinámicos para ordenar por la fecha y luego pasar la lista ordenada al ensamblado consumidor. Gracias por la info! – Halcyon

+0

@Halcyon Cool. El problema es que los tipos anon son internos. Hay algunos hacks que los envuelven en una dinámica que les permite trabajar en ensamblajes, pero de hecho es mejor cambiar la solución. –

3

He verificado que tu consulta funcione en .NET 4.0. ¿Te falta una referencia al Microsoft.CSharp desde tu ensamblaje?

Cuestiones relacionadas