此代码:
var allSubjectsForAStudent = GetAllSubjects<Subject>(studentId);
返回
IEnumerable<Subject>
,我可以看到在调试器中返回的一堆主题。
想要检查一个特定的主题是否在进行不区分大小写的比较。
这是我的代码:
var studentSubjects = allSubjectsForAStudent.Where(s => s.Name.Equals(subjectName, StringComparison.CurrentCultureIgnoreCase));
'subjectName'是方法将接收的参数。
当这行执行时,我得到'Object not set to a instance of an Object '错误。
所以我想做的是一个大小写不敏感的搜索,当有多个时返回第一个项目,当没有时返回一个空集合。
什么线索吗?
编辑1
的答案表明,在第一个集合中可能有一个条目是'null'。虽然观察结果为真,但程序确保'Subject Name'不能为空值。希望对你有帮助。
你可以试试:
var studentSubjects = allSubjectsForAStudent.Where(s => !string.IsNullOrWhiteSpace(s.Name) && s.Name.ToUpperInvariant() == subjectName.ToUpperInvariant()).FirstOrDefault();
这将设置studentSubjects
为null或IEnumerable
中匹配的第一个实例。
你得到一个NullReferenceException当你调用
s.Name.Equals(subjectName)
它将:
if(allSubjectsForAStudent!=null && !string.IsNullorEmpty(subjectName))
var studentSubjects = allSubjectsForAStudent.Where(s => s.Name.Equals(subjectName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();