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