Не работает, когда оба значения равны нулю, потому что первая часть выражения будет иметь значение true
, что не позволит закорочить оценку Почему бы не использовать правила эквивалентности, чтобы перевернуть утверждение?
(firstName != null && firstName.ToLower() == p.firstName.ToLower())
РЕДАКТИРОВАТЬ: я написал следующее и успешно запустил его в LINQPad 4, без проблем. Я предполагаю, что вызов People.All()
просто возвращает IQueryable<People>
с полным набором записей? Может быть, опубликуете здесь текст вашего исключения, чтобы мы могли увидеть, если вы что-то случайно пропустили?
void Main()
{
string a = null;
string b = null;
var peeps = new List<Person> {
new Person {
FirstName = "John",
LastName = "Connor"
},
new Person {
FirstName = "Sarah",
LastName = "Connor",
},
new Person {
FirstName = "Cletus",
LastName = "Handy"
}
};
var somePeeps = from p in peeps
where (a == null || a.ToLower() == p.FirstName.ToLower())
&& (b == null || b.ToLower() == p.LastName.ToLower())
select p;
somePeeps.Dump();
}
public class Person
{
public string FirstName { get; set;}
public string LastName { get; set;}
}