2011-10-11 30 views
5

Estoy usando el Massive ORM de Rob Conery.Cuente con un IEnumerable <dynamic>

¿Hay alguna forma elegante de contar el conjunto de registros devuelto?

dynamic viewModelExpando = result.ViewData.Model; 
var queryFromMassiveDynamic = viewModelExpando.TenTricksNewestFirst; 

//fails as have actually got TryInvokeMember on it 
var z = queryFromMassiveDynamic.Count(); 

//works 
int i = 0; 
foreach (var item in queryFromMassiveDynamic) { 
    i++; 
} 

Respuesta

13

En lugar de llamarlo utilizando la sintaxis del miembro del método de extensión, intente llamar directamente al método estático.

int count = Enumerable.Count(queryFromMassiveDynamic); 
+0

+1 por supuesto ... no se encontró el método de extensión. Estoy intrigado por la magia de resolución de sobrecarga en tiempo de ejecución dinámica. Parece que siempre me olvido de eso. – sehe

4

La pregunta es un poco desalentadora. En realidad, no estás contando un IEnumerable<dynamic>. Estás tratando de un recuento en un dynamic (que con suerte tiene un IEnumerable).

La forma más sencilla de hacer esto es mediante el uso de un molde:

var z = (queryFromMassiveDynamic as IEnumerable<dynamic>).Count(); 
4

Usted puede tomar la respuesta de sehe, que ha de emitir el resultado.

var z = (queryFromMassiveDynamic as IEnumerable<dynamic>).Count(); 

En cambio, sepa lo que está obteniendo de la función de miembro de la consulta. De hecho, está obteniendo un IEnumerable de tipo dinámico y var tiene problemas con ellos.

cambiar esta línea

var queryFromMassiveDynamic = viewModelExpando.TenTricksNewestFirst; 

Para este

IEnumerable<dynamic> queryFromMassiveDynamic = viewModelExpando.TenTricksNewestFirst; 

conde se mostrará sin tener que hacer ningún casting.

Cuestiones relacionadas