未设置为对象实例的对象引用

本文关键字:对象引用 实例 对象 设置 | 更新日期: 2023-09-27 18:07:05

我有一个简单的客户表,有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,所以它得到:

对象引用未设置为对象的实例

为什么在Dapper中使用linq那么棘手,我做错了吗?

未设置为对象实例的对象引用

您可以使用string.Equals()StringComparison类型:

var a = data.FirstOrDefault(f => string.Equals(f.Email, "test@test.com", StringComparison.OrdinalIgnoreCase));

这工作,因为Equals()不会抛出一个空引用异常,当任何一个参数是nullStringComparison.OrdinalIgnoreCase表示不区分大小写

这将摆脱你的空引用异常:

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");