依靠IEnumerable <dynamic> </dynamic>

时间:2011-10-11 22:30:08

标签: c#-4.0 dynamic massive

我正在使用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++;
}

3 个答案:

答案 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;

计数将显示而无需进行任何投射。