Это не имеет ничего общего с FirstOrDefault
, но это распространенная проблема, которая решается статическим методом Object.Equals
. Вы хотите:
MyObject obj = objList.FirstOrDefault(o => Object.Equals(o.Parent, x.Parent));
Кстати, этот метод выглядит примерно так:
public static bool Equals(Object objA, Object objB)
{
// handle situation where both objects are null or both the same reference
if (objA == objB)
return true;
// both are not null, so if any is null they can't be equal
if (objA == null || objB == null)
return false;
// nulls are already handled, so it's now safe to call objA.Equals
return objA.Equals(objB);
}
Даже если этот метод не существует, вы все равно можете написать свое назначение следующим образом:
MyObject obj = objList.FirstOrDefault(x.Parent == null ?
o => o.Parent == null :
o => x.Parent.Equals(o.Parent));
Это использует другую лямбду в зависимости от того, является ли x.Parent
нулевым. Если он нулевой, он просто должен искать объекты, у которых Parent
равно нулю. Если нет, то всегда безопасно звонить x.Parent.Equals
и использует лямбду, которая делает это.