我很难弄清楚它为什么不能正常工作,但我要求它。
Dim goodCount As Integer = (From item In equipmentTagList
Where item.Importance = "Critique"
Where item.Status <> TargetRange.OutOfRange
Select item).Count()
Dim badCount As Integer = (From item In equipmentTagList
Where item.Importance = "Critique"
Where item.Status.Contains(TargetRange.OutOfRange)
Select item).Count()EquipmentTagList是一个List(Of MachineTag) (自定义对象),因此我想从EquipmentTagList获得多少个匹配条件的MachineTag。我仍然不明白为什么第一种方法有效,而另一种则不行。通过调试,我知道第一个结果至少返回一个结果,而另一个结果不返回任何结果.我已经找了很多人来找人帮忙,但不幸的是我什么也没发现.
谢谢你帮我。
编辑:
我得到的错误是:没有将对象引用设置为对象实例的System.InvalidOperationException。
发布于 2017-03-20 02:29:03
假设目前item.Status是一种Integer数据类型(从您对TargetRange.OutOfRange的使用中推断出来,就好像它是一个Enum),那么您的第二个片段中的语法将被认为是错误的。
.Contains()方法保留用于IEnumerable对象,而不是Integer值。
如果稍微修改代码,如下所示:
Dim badCount = (From item In equipmentTagList
Where item.Importance = "Critique"
Where item.Status.Contains(TargetRange.OutOfRange)
Select item)然后,...and在调用之后的某个点设置一个断点,您将注意到badCount是Nothing。因为Nothing不能有.Count,所以调用失败。
您的第一个片段是正确的-正如您已经指出的。
编辑
这里有东西不对劲。您的代码甚至不应该编译。
我得到的是:

所以item.Status当然不可能是Integer。
发布于 2017-03-20 03:02:36
也许这会让事情变得简单一些。您可以在按Status过滤后按Importance进行分组。
Dim items = From i In equipmentTagList Where i.Importance = "Critique"
Dim counts = items.ToLookup(Function(i) i.Status <> TargetRange.OutOfRange)
Dim goodCount = counts(True).Count()
Dim badCount = counts(False).Count()https://stackoverflow.com/questions/42894733
复制相似问题