2011-10-11 15 views
5

Używam Massive ORM Rob Conery.Licz na IEnumerable <dynamic>

Czy istnieje elegancki sposób na przeliczenie zestawu rekordów?

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++; 
} 

Odpowiedz

13

Zamiast wywoływać to za pomocą składni metody składnika rozszerzenia, należy wywołać metodę statyczną bezpośrednio.

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

+1 oczywiście ... nie można znaleźć metody rozszerzenia. Intryguje mnie magia dynamiki, która pozwala mi na przeładowanie w czasie pracy. Wydaje mi się, że zawsze o tym zapominam. – sehe

4

Pytanie jest nieco poniżej. W rzeczywistości nie liczysz się z IEnumerable<dynamic>. Jesteś próbując licznik na dynamic (który mam nadzieję, że posiada an IEnumerable).

Prosta sposobem na to jest za pomocą obsady:

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

można wziąć odpowiedź sehe, którym jest rzucić wynik.

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

Zamiast tego uświadom sobie, co otrzymujesz z funkcji członka kwerendy. W rzeczywistości otrzymujesz dynamiczny typ IEnumerable, a var ma z nimi kłopot.

Zmiana ta linia

var queryFromMassiveDynamic = viewModelExpando.TenTricksNewestFirst; 

W tym

IEnumerable<dynamic> queryFromMassiveDynamic = viewModelExpando.TenTricksNewestFirst; 

hrabiego pokaże się bez konieczności wykonywania jakichkolwiek odlewania.

Powiązane problemy