Это почти наверняка случай логического оператора.
В C # логическое И (&&
) имеет приоритет над логическим ИЛИ (||
).
Это должно помочь вам понять:
bool result = true || true && false; // --> true
bool result = (true || true) && false; // --> false
bool result = true || (true && false); // --> true
И в вашем примере у вас есть утверждение, похожее на:
A || B && C && D
Сначала будет оцениваться
B && C && D
, а затем результат ||
с A
.
Итак, возвращаясь к вашему оригиналу,
x.Pendente != Status.Sent ||
x.Pendente != Status.NotFound && !string.IsNullOrEmpty(x.Email) && !string.IsNullOrEmpty(x.NossoNumero))
По сути, вы выбираете;
- либо объекты, чьи
Status != Sent
,
OR
- объекты, чьи
Status != NotFound
И Email
не являются нулевыми или пустыми И NossoNumero
не являются нулевыми или пустыми.
Итак, первая часть позволяет объекту, чей электронный адрес является нулевым, быть выбранным в вашем предложении Where
.
EDIT
Также обратите внимание, что если вы сгруппируете x.Pendente != Status.Sent || x.Pendente != Status.NotFound
вместе, это тоже может быть проблемой. OR
операция на двух not
с не имеет большого смысла.