我有简单的客户表,有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() == "admin@yourstore.com"); >> ok
var bbb= data.FirstOrDefault(f => f.Email.ToLower() == "kjhkh");
因为其他项目有email = null
,所以它得到:
对象引用未设置为对象的实例
为什么使用linq和Dapper一样棘手,我做错了吗?
答案 0 :(得分:1)
您可以将string.Equals()
与StringComparison
类型一起使用:
var a = data.FirstOrDefault(f => string.Equals(f.Email, "test@test.com", StringComparison.OrdinalIgnoreCase));
这是有效的,因为Equals()
在其中一个参数为null
时不会抛出空引用异常。 StringComparison.OrdinalIgnoreCase
表示比较不区分大小写。
答案 1 :(得分:0)
这将消除您的空引用异常:
var aaa= data.FirstOrDefault(f => f.Email != null && f.Email.ToLower() == "admin@yourstore.com");
var bbb= data.FirstOrDefault(f => f.Email != null && f.Email.ToLower() == "kjhkh");