【问题标题】:Count on an IEnumerable<dynamic>依靠 IEnumerable<dynamic>
【发布时间】:2012-10-09 21:47:16
【问题描述】:

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

【问题讨论】:

    标签: c#-4.0 dynamic massive


    【解决方案1】:

    不要使用扩展方法成员语法调用它,而是直接调用静态方法。

    int count = Enumerable.Count(queryFromMassiveDynamic);
    

    【讨论】:

    • +1 当然...找不到扩展方法。我对动态的运行时重载解析魔法很感兴趣。我似乎总是忘记这一点。
    【解决方案2】:

    这个问题有点不对劲。您实际上并没有计算IEnumerable&lt;dynamic&gt;。您正在尝试计算dynamic(希望拥有IEnumerable)。

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

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

    【讨论】:

      【解决方案3】:

      你可以采取sehe的答案,就是投出结果。

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

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

      改变这一行

      var queryFromMassiveDynamic = viewModelExpando.TenTricksNewestFirst;
      

      到这里

      IEnumerable<dynamic> queryFromMassiveDynamic = viewModelExpando.TenTricksNewestFirst;
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-22
        • 1970-01-01
        • 2013-03-20
        相关资源
        最近更新 更多