dapper linq Ссылка на объект не установлена ​​​​на экземпляр объекта

У меня есть простая таблица клиентов с 4 записями, и только у одной есть электронная почта.

public string Username { get; set; }
public string Email { get; set; }

............

var data = cn.Query<Customer>("select * from customer");

var aaa= data.FirstOrDefault(f => f.Email.ToLower() == "[email protected]"); >> ok
var bbb= data.FirstOrDefault(f => f.Email.ToLower() == "kjhkh");

так как другие элементы имеют email = null, поэтому он получает:

В экземпляре объекта не задана ссылка на объект

Почему так сложно использовать linq с Dapper, я делаю неправильно?


person nam vo    schedule 07.06.2014    source источник
comment
Не по теме, но важно: вы должны сделать cn.Query<Customer>("select * from customer").ToList();. В настоящее время вы повторно выполняете запрос с каждым оператором FirstOrDefault (вероятно, это не имеет большого значения с 4 записями, но речь идет о правильных шаблонах).   -  person Gert Arnold    schedule 08.06.2014


Ответы (2)


Вы можете использовать string.Equals() с < тип href="http://msdn.microsoft.com/en-us/library/system.stringcomparison%28v=vs.110%29.aspx" rel="nofollow">StringComparison:

var a = data.FirstOrDefault(f => string.Equals(f.Email, "[email protected]", StringComparison.OrdinalIgnoreCase));

Это работает, поскольку Equals() не будет вызывать исключение нулевой ссылки, когда любой из аргументов равен null. StringComparison.OrdinalIgnoreCase указывает, что сравнение не зависит от регистра.

person Henk Mollema    schedule 11.06.2014

Это избавит вас от исключений нулевой ссылки:

var aaa= data.FirstOrDefault(f => f.Email != null && f.Email.ToLower() == "[email protected]");
var bbb= data.FirstOrDefault(f => f.Email != null && f.Email.ToLower() == "kjhkh");
person p e p    schedule 07.06.2014