在IEnumerable上使用LINQ的Equals



此代码:

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

相关内容

  • 没有找到相关文章

最新更新