System.Collections.Generic.List的计数

Pin*_*nch 5 c# asp.net-mvc razor

ViewBag.EquipmentList = myInventoryEntities.p_Configurable_Equipment_Request_Select(Address_ID, false).Select(c => new { Value = c.Quantity + " " + c.Device_Name + " (s)", ID = c.Device_ID.ToString() }).ToList();
Run Code Online (Sandbox Code Playgroud)

在Razor我想做以下事情

@ViewBag.EquipmentList.Count
Run Code Online (Sandbox Code Playgroud)

但是Count总是== 1

我知道我可以在foreach中迭代,但更愿意采用更直接的方法.

也许我在概念上是假的?

Chr*_*int 5

@ViewBag.EquipmentListNI.Count()
Run Code Online (Sandbox Code Playgroud)

  • @Pinch:如果您正在使用Linq扩展方法,它可以. (2认同)

Jon*_*eet 5

编辑:好的,现在好像你已经过去Count没有执行:

但是Count总是== 1

听起来你总是拿着一个只有一个条目的列表.如果这是意料之外的,你应该看看为什么你只得到一个条目 - 开始调试代码...这听起来不像是一个剃刀完全没问题.


如果你的价值是真是List<T>对一些T,我相信它应该罚款.表达式ViewBag.EquipmentList.Count将在每个点动态评估.

换句话说,如果你真的,真的使用显示的赋值代码,它应该没问题.

但是,如果该值仅是一些实施IEnumerable<T>公开一个Count属性,那么你需要使用Enumerable.Count()扩展方法-你不能正常使用"扩展方法的语法"与动态类型.一个简单的解决方法是使用:

Enumerable.Count(ViewBag.EquipmentList)
Run Code Online (Sandbox Code Playgroud)

......这仍将使用动态类型的参数Enumerable.Count,但它不会有找到Count()方法扩展方法.

或者,确保您的价值确实是一个List<T>.如果它实际上是一个数组,您应该能够更改代码以使用该Length属性.