在IEnumerable上使用与LINQ的Equals

时间:2015-06-01 06:08:50

标签: c# linq

此代码:

var allSubjectsForAStudent =    GetAllSubjects<Subject>(studentId);

返回

IEnumerable<Subject> 

我可以在调试器中看到一堆主题。

想要检查特定主题是否进行不区分大小写的比较。

这是我的代码:

var studentSubjects = allSubjectsForAStudent.Where(s => s.Name.Equals(subjectName, StringComparison.CurrentCultureIgnoreCase));

'subjectName'是该方法将接收的参数。

当这一行执行时,我得到'对象未设置为对象的实例'错误。

所以我想做的是CASE INSENSITIVE搜索并在有多个时返回第一个项目,如果没有则返回空集合。

任何线索?

修改1

答案表明第一个集合中可能有一个可能有“空”的条目。虽然观察结果是正确的,但程序确保“主题名称”不能为空值。希望这会有所帮助。

提前致谢。

2 个答案:

答案 0 :(得分:0)

你可以尝试:

datatable

这会将var studentSubjects = allSubjectsForAStudent.Where(s => !string.IsNullOrWhiteSpace(s.Name) && s.Name.ToUpperInvariant() == subjectName.ToUpperInvariant()).FirstOrDefault(); 设置为null或匹配的studentSubjects中的第一个实例。

您致电

时收到NullReferenceException
IEnumerable

表示s.Name为null的对象。

答案 1 :(得分:0)

它会:

if(allSubjectsForAStudent!=null && !string.IsNullorEmpty(subjectName))
var studentSubjects = allSubjectsForAStudent.Where(s => s.Name.Equals(subjectName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();