Нулевая ссылка в лямбда-макс. - PullRequest
0 голосов
/ 05 октября 2011
 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

Но если мой список атрибутов пуст.Лямбда выбрасывает нулевую ссылку.Есть ли способ проверить нулевую ссылку в лямбде?Или есть лучший способ переписать вышеупомянутый запрос linq?

Спасибо, Джотиш

Ответы [ 3 ]

1 голос
/ 05 октября 2011

Я бы поместил FirstOrDefault в самый конец, добавив Select следующим образом:

oLsInventory.OrderByDescending(Function(c) c.AttributeList.Count).Select(Function(c) c.AttributeList.Count).FirstOrDefault()
0 голосов
/ 06 октября 2011

Вот так у меня все получилось. Перед заказом я отфильтровал нулевые объекты .. затем запустил счетчик в верхней части этого списка.

oLsInventory.FindAll(Function(c) c.AttributeList IsNot Nothing).OrderByDescending(Function(c) c.AttributeList.Count).Select(Function(c) c.AttributeList.Count).FirstOrDefault()
0 голосов
/ 05 октября 2011

Переместите 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()
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...