2011-10-11 40 views
5

Tôi đang sử dụng ORM lớn của Rob Conery.Đếm trên IEnumerable <dynamic>

Có cách nào thanh lịch để đếm trên bộ hồ sơ được trả về không?

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

Trả lời

13

Thay vì gọi nó bằng cú pháp thành viên của phương thức tiện ích, hãy thử gọi phương thức tĩnh trực tiếp.

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

+1 tất nhiên ... không tìm thấy phương thức mở rộng. Tôi bị hấp dẫn bởi phép thuật phân giải quá tải thời gian chạy của năng động. Tôi dường như luôn quên điều đó. – sehe

4

Câu hỏi hơi lệch. Bạn không thực sự đang đếm số IEnumerable<dynamic>. Bạn đang thử số số trên dynamic (hy vọng giữ an IEnumerable).

Cách đơn giản để làm điều này là sử dụng một dàn diễn viên:

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

Bạn có thể lấy câu trả lời sehe, mà là để đúc kết quả.

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

Thay vào đó, hãy nhận ra những gì bạn đang nhận được từ chức năng thành viên Truy vấn. Bạn đang trong thực tế nhận được một IEnumerable loại năng động và var có rắc rối với những người.

Thay đổi dòng này

var queryFromMassiveDynamic = viewModelExpando.TenTricksNewestFirst; 

Để Đếm

IEnumerable<dynamic> queryFromMassiveDynamic = viewModelExpando.TenTricksNewestFirst; 

này sẽ hiển thị mà không cần phải làm bất cứ đúc.

Các vấn đề liên quan