带有contains的表达式,给出错误,如"对象引用未设置为对象的实例"

时间:2015-01-05 16:31:02

标签: c# linq

当我使用带有包含的C#linq表达式时,我得到一个错误,例如"对象引用未设置为对象的实例"。 我的代码段是,

var query = GetUserDataForList();// It contains the data I want
 search = (search == null) ? "" : search;
 string searchText = (search == null) ? "" : search.ToLower().ToString();

 var users = query.Where(a => a.Email.ToLower().Contains(searchText) && a.Email != null).AsEnumerable();
 users = users.Skip(rowsPerPage * (page - 1)).Take(rowsPerPage).AsEnumerable();

任何想法如何解决?

1 个答案:

答案 0 :(得分:3)

Where条款中的条件应如下:

a.Email != null && a.Email.ToLower().Contains(searchText)

因为只有在null的情况下它才会短路。即使您的Emailnull,它也会尝试使用ToLower并为您提供NRE。

请参阅:&& Operator (C# Reference)

  

条件AND运算符(&&)执行其bool的逻辑AND   操作数,但仅在必要时才评估其第二个操作数