lambda最大计数中的空引用

时间:2011-10-05 16:14:01

标签: vb.net linq lambda

 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

3 个答案:

答案 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()