Я использую linq для фильтрации выбора MessageItems. Метод, который я написал, принимает множество параметров, которые могут быть нулевыми. Если они равны нулю, критерии для файла следует игнорировать. Если он не равен нулю, используйте его для фильтрации результатов.
Я понимаю, что при выполнении || операция - это С#, если первое выражение истинно, второе выражение не должно быть оценено.
например.
if(ExpressionOne() || ExpressionTwo())
{
// only ExpressionOne was evaluated because it was true
}
теперь, в linq, я пытаюсь это сделать:
var messages = (from msg in dc.MessageItems
where String.IsNullOrEmpty(fromname) || (!String.IsNullOrEmpty(fromname) && msg.FromName.ToLower().Contains(fromname.ToLower()))
select msg);
Я бы подумал, что это будет звучать, потому что String.IsNullOrEmpty(fromname)
будет равно true, а вторая часть || не будет запущен.
Однако он запускается, а вторая часть
msg.FromName.ToLower().Contains(fromname.ToLower()))
выбрасывает исключение нулевой ссылки (потому что fromname
равно null)!! - Я получаю классическое исключение "Ссылка на объект, не установленное на экземпляр объекта".
Любая помощь?