除非p.School.SchoolName结果为null,否则下面的代码有效,在这种情况下,它会导致NullReferenceException.
if (ExistingUsers.Where(p => p.StudentID == item.StaffID &&
p.School.SchoolName == item.SchoolID).Count() > 0)
{
// Do stuff.
}
Run Code Online (Sandbox Code Playgroud)
ExistingUsers是一个用户列表:
public List<User> ExistingUsers;
Run Code Online (Sandbox Code Playgroud)
这是stacktrace的相关部分:
System.NullReferenceException:未将对象引用设置为对象的实例.
在System.Linq.Enumerable.WhereListIterator 1源码)
1.MoveNext()
at System.Linq.Enumerable.Count[TSource](IEnumerable
我应该如何处理这个where子句?
首先十分感谢.
Ahm*_*eed 27
我怀疑p.School是空的,不是SchoolName.只需在访问前添加空检查SchoolName.此外,用于Any()检查是否有任何结果,而不是Count() > 0除非你真的需要计数.这表现得更好,因为并非所有项都被迭代(如果存在的话).
var result = ExistingUsers.Where(p => p.StudentID == item.StaffID
&& p.School != null
&& p.School.SchoolName == item.SchoolID)
.Any();
if (result) { /* do something */ }
Run Code Online (Sandbox Code Playgroud)