Public Class Inventory
Public Property Productcode As String
Public Property lstattribute As List(Of Attribute)
End Class
Public Class Attribute
Public Property Name As String
Public Property value As String
End Class
我有一个库存物品清单。 我想在库存清单中获取属性列表的最大数量
我使用了这段代码
oLsInventory.OrderByDescending(Function(c) c.AttributeList.Count).FirstOrDefault().AttributeList.Count
但是如果我的属性列表为null。 lambda抛出null引用。 有没有办法检查lambda中的空引用?或者有更好的方法来重写上面的linq查询?
由于 Jothish
答案 0 :(得分:1)
我会将FirstOrDefault放在最后,方法是添加一个Select,如下所示:
oLsInventory.OrderByDescending(Function(c) c.AttributeList.Count).Select(Function(c) c.AttributeList.Count).FirstOrDefault()
答案 1 :(得分:0)
将FirstOrDefault
移至最后并使用Select
将您的库存列表映射到属性计数列表。
' Returns 0 if the list is empty
Dim max = oLsInventory.OrderByDescending(Function(c) c.AttributeList.Count) _
.Select(Function(c) AttributeList.Count).FirstOrDefault()
另一种选择是:
Integer.MinValue
添加到列表执行Max()
:
' Returns Integer.MinValue if oLsInventory is empty
Dim maxValue = oLsInventory.Select(Function(c) AttributeList.Count) _
.Union(New Integer() {Integer.MinValue}).Max()
答案 2 :(得分:0)
这就是我的工作方式。 在订购之前,我过滤了空对象。然后在该列表的顶部运行计数。
oLsInventory.FindAll(Function(c) c.AttributeList IsNot Nothing).OrderByDescending(Function(c) c.AttributeList.Count).Select(Function(c) c.AttributeList.Count).FirstOrDefault()