5

我正在使用 Rob Conery 的大规模 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++;
}
4

3 回答 3

14

与其使用扩展方法成员语法调用它,不如尝试直接调用静态方法。

int count = Enumerable.Count(queryFromMassiveDynamic);
于 2011-10-11T22:36:46.400 回答
4

这个问题有点绕。您实际上并没有计算IEnumerable<dynamic>. 您正在尝试计算 a dynamic(希望拥有a IEnumerable)。

直接的方法是使用强制转换:

 var z = (queryFromMassiveDynamic as IEnumerable<dynamic>).Count();
于 2011-10-11T22:36:48.497 回答
4

您可以采取sehe的答案,即转换结果。

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

相反,请意识到您从 Query 成员函数中得到了什么。实际上,您正在获得一个动态类型的 IEnumerable,而 var 在这些方面遇到了麻烦。

更改此行

var queryFromMassiveDynamic = viewModelExpando.TenTricksNewestFirst;

对此

IEnumerable<dynamic> queryFromMassiveDynamic = viewModelExpando.TenTricksNewestFirst;

Count 将出现而无需进行任何投射。

于 2012-04-18T23:28:47.367 回答