Как проверить наличие null перед использованием в linq?

#c# #linq

#c# #linq

Вопрос:

У меня есть список объектов, который содержит в себе другой объект.

 List<MyClass> myClass = new List<MyClass>();
  

Я хочу сделать какой-нибудь linq, подобный этому

 myClass.Where(x => x.MyOtherObject.Name = "Name").ToList();
  

Дело в том, что иногда «MyOtherObject» имеет значение null. Как мне это проверить?

Комментарии:

1. ты имеешь в виду == "Name" ?

Ответ №1:

Просто, просто добавьте AND предложение, чтобы проверить, не равно ли оно null:

 myClass.Where(x => x.MyOtherObject != null amp;amp; x.MyOtherObject.Name = "Name").ToList();
  

Ответ №2:

Начиная с C # 6, вы также можете использовать нулевой условный оператор ?. :

 myClass.Where(x => x.MyOtherObject?.Name == "Name").ToList();
  

Это, по сути, преобразует Name свойство в null, если MyOtherObject равно null, что приведет к сбою сравнения с "Name" .

Попробуйте онлайн

Ответ №3:

Вы можете просто заставить свой предикат проверять наличие null…

 myClass.Where(x => (x.MyOtherObject == null) ? false : x.MyOtherObject.Name == "Name").ToList();
  

Ответ №4:

Я бы сделал что-то вроде этого:

 myClass.Where(x => x.MyOtherObject != null)
       .Where(y => y.MyOtherObject.Name = "Name")
       .ToList();