我正在使用Rob Conery的Massive ORM。
是否有一种优雅的方法可以对返回的记录集进行计数?
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++;
}
答案 0 :(得分:13)
不要使用扩展方法成员语法调用它,而是直接尝试调用静态方法。
int count = Enumerable.Count(queryFromMassiveDynamic);
答案 1 :(得分:4)
问题有点过了。你实际上并没有计算IEnumerable<dynamic>
。您尝试计算dynamic
(希望持有 IEnumerable
)。
执行此操作的直接方法是使用强制转换:
var z = (queryFromMassiveDynamic as IEnumerable<dynamic>).Count();
答案 2 :(得分:4)
你可以采取sehe的答案,即投射结果。
var z = (queryFromMassiveDynamic as IEnumerable<dynamic>).Count();
相反,要实现从Query成员函数中获得的内容。事实上,你正在获得一个IEnumerable类型的动态,而var则遇到了麻烦。
更改此行
var queryFromMassiveDynamic = viewModelExpando.TenTricksNewestFirst;
到此
IEnumerable<dynamic> queryFromMassiveDynamic = viewModelExpando.TenTricksNewestFirst;
计数将显示而无需进行任何投射。