Performance 使用或检查空值的LINQ
我在表User中有2个值:Address1,Address2。两者都可以为空。作为筛选方法的一部分,我尝试以下方法:Performance 使用或检查空值的LINQ,performance,linq,logic,Performance,Linq,Logic,我在表User中有2个值:Address1,Address2。两者都可以为空。作为筛选方法的一部分,我尝试以下方法: var tempUsers = users.Where(q => q.Address1.ToLower().Contains(address.ToLower()) || q.Address2.ToLower().Contains(address.ToLower())); 这将返回一个空引用异常,这是正确的 Linq查询需要针对空值进行处理 我会尝试 查询中的null.T
var tempUsers = users.Where(q => q.Address1.ToLower().Contains(address.ToLower()) || q.Address2.ToLower().Contains(address.ToLower()));
这将返回一个空引用异常,这是正确的
var address = (GetAddressFromOuterWorld() ?? String.Empty).ToLower();
var tempUsers = users.Where(user => (user.Address1 ?? String.Empty).ToLower().Contains(address)
|| (user.Address2 ?? String.Empty).ToLower().Contains(address));
这肯定适用于LINQ to对象,但可能不适用于LINQ to SQL,但在这种情况下,您通常会编写user.Address1==address | | user.Addrss2==address
,并且您的数据库使用了。这是怎么回事:
var address = (GetAddressFromOuterWorld() ?? String.Empty).ToLower();
var tempUsers = users.Where(user => (user.Address1 ?? String.Empty).ToLower().Contains(address)
|| (user.Address2 ?? String.Empty).ToLower().Contains(address));
这肯定适用于LINQ to对象,但可能无法使用LINQ to SQL,但在这种情况下,您通常会编写
user.Address1==address | | | user.Addrss2==address
,并且您的数据库使用。您可以像这样轻松地添加空检查
var tempUsers = users.Where(q =>
(!string.IsNullOrEmpty(q.Address1) && q.Address1.ToLower().Contains(address.ToLower())) ||
(!string.IsNullOrEmpty(q.Address2) && q.Address2.ToLower().Contains(address.ToLower())));
您可以像这样轻松地添加空检查
var tempUsers = users.Where(q =>
(!string.IsNullOrEmpty(q.Address1) && q.Address1.ToLower().Contains(address.ToLower())) ||
(!string.IsNullOrEmpty(q.Address2) && q.Address2.ToLower().Contains(address.ToLower())));
试试这个:var tempUsers=users.Where(q=>(q.Address1!=null&&q.Address1.ToLower().Contains(address.ToLower())| |(q.Address2!=null&&q.Address2.ToLower().Contains(address.ToLower());试试这个:var tempUsers=users.Where(q=>(q.Address1!=null&&q.Address1.ToLower().Contains(address.ToLower())| |(q.Address2!=null&&q.Address2.ToLower().Contains(address.ToLower());