#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();