Я не помню полных правил приоритета наизусть, но ваше состояние эквивалентно:
p => (p.PhotoID == id && includePending) ? true : p.Live
, тогда как вы хотите:
p => p.PhotoID == id && (includePending ? true : p.Live)
Просто используйте последнюю форму, чтобы сделать ее явной, или даже измените ее, чтобы не использовать условное выражение:
p => p.PhotoID == id && (includePending || p.Live)
, которое, я бы сказал, проще.Я хотел бы предложить, чтобы в подобных ситуациях вы использовали скобки, чтобы сделать логику более понятной, даже когда правила предшествования работают в вашу пользу.
Вы можете даже использовать два предложения where:
.Where(p => p.PhotoID == id)
.Where(p => includePending || p.live)
илидаже условно второй:
var query = ...
.Where(p => p.PhotoID == id);
if (!includePending)
{
query = query.Where(p => p.live);
}