2011-10-11 22 views
5

Rob Conery'nin Massive ORM kullanıyorum.Bir IEnumerable üzerinde sayma <dynamic>

Döndürülmüş kayıt kümesinde saymak için şık bir yol var mı?

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

cevap

13

Uzantı yöntemi üye sözdizimini kullanarak çağırmak yerine, doğrudan statik yöntemi çağırmayı deneyin.

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

+1 Elbette ... uzantı yöntemi bulunamadı. Dinamik çalışma zamanı aşırı yükleme çözünürlüğü büyüsü ile şaşırdım. Bunu her zaman unutuyorum. – sehe

4

Sorun biraz kapalı. Aslında bir IEnumerable<dynamic> sayımı yapmıyorsunuz. olan'u dynamic numaralı telefona ( ve IEnumerable numaralı telefon numaralarını içeren bir sayı) deneyin.

Bunu yapmanın basit bir yolu, bir döküm kullanmaktır: Sen sonucunu döküm etmektir sehe yanıtını alabilir

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

. Sorgu üyesi işlevinden ne aldığınızı anlayın. Bunun yerine, Query üye işlevinden ne aldığınızı öğrenin. Aslında bir IEnumerable tip dinamik alıyorsunuz ve var olanlarla ilgili problem var.

Değişim bu

IEnumerable<dynamic> queryFromMassiveDynamic = viewModelExpando.TenTricksNewestFirst; 

Kont için bu hat

var queryFromMassiveDynamic = viewModelExpando.TenTricksNewestFirst; 

herhangi döküm yapmak zorunda kalmadan görünecektir.

İlgili konular