Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在IEnumerable上使用带LINQ的Equals_C#_Linq - Fatal编程技术网

C# 在IEnumerable上使用带LINQ的Equals

C# 在IEnumerable上使用带LINQ的Equals,c#,linq,C#,Linq,此代码: var allSubjectsForAStudent = GetAllSubjects<Subject>(studentId); “subjectName”是方法将接收的参数 当这行执行时,我得到“对象未设置为对象实例”错误 所以我要做的是不区分大小写的搜索,当有多个项时返回第一个项,当没有项时返回一个空集合 有什么线索吗 编辑1 答案表明,第一个集合中可能有一个条目具有“null”。当观察结果为真时,程序确保“主题名称”不能为空值。希望这有帮助 提前感谢。您可以尝

此代码:

var allSubjectsForAStudent =    GetAllSubjects<Subject>(studentId);
“subjectName”是方法将接收的参数

当这行执行时,我得到“对象未设置为对象实例”错误

所以我要做的是不区分大小写的搜索,当有多个项时返回第一个项,当没有项时返回一个空集合

有什么线索吗

编辑1

答案表明,第一个集合中可能有一个条目具有“null”。当观察结果为真时,程序确保“主题名称”不能为空值。希望这有帮助

提前感谢。

您可以尝试:

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

当您调用时,将收到一个NullReferenceException

s.Name.Equals(subjectName)
对于s.Name为空的对象,它将:

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

集合中是否有名为
null
的项?这是最有可能的原因。我很想以复制品的形式结束。。。但我不得不告诉你,你没有向我们展示足够的代码来诊断问题。问题在于你是如何得到你的科目的。有些东西是
null
,但我们无法知道,因为您没有向我们展示任何代码。Rosenheimer,这会在不匹配时给出“序列不包含元素”。我修复了它,我应该使用FirstOrDefault,而不是仅使用First。现在应该可以工作了。
s.Name.Equals(subjectName)
if(allSubjectsForAStudent!=null && !string.IsNullorEmpty(subjectName))
var studentSubjects = allSubjectsForAStudent.Where(s => s.Name.Equals(subjectName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();