recordsList.ListOfRecords = new StudentRecordsBAL()
.GetStudentsList()
.Select(q => new StudentRecords()
{
_RollNumber = q._RollNumber,
_Class = q._Class,
_Name = q._Name,
_Address = q._Address,
_City = q._City,
_State = q._State,
_Subjects = q._Subject,
_AttendedDays = new AttendanceBAL()
.GetAttendanceListOf(q._RollNumber)
.Where(date => date != null)
.Select(date =>
new DateTime(date._Date.Year, date._Date.Month, date._Date.Day))
.Distinct()
.ToList(),
_AttendedSubjects = GetAttendedSubjects(q._RollNumber)
}).ToList();
方法,GetAttendanceListOf(q._RollNumber)
上面的代码将返回数据库中的记录列表,如果传递的“roll-no”没有记录,则返回“null”。 linq 查询将终止并生成错误
“值不能为空”。
有没有办法处理这个错误并使 LINQ 跳转到下一步?
_AttendedDays = new AttendanceBAL()
.GetAttendanceListOf(q._RollNumber)
.Where(date => date != null)
.Select(date => new DateTime(date._Date.Year, date._Date.Month, date._Date.Day))
.Distinct()
.ToList(),
问题出在跑步上Where()
在空实例上。可能的解决方案:
1)修改GetAttendanceListOf
如果没有出席则返回一个空列表(一般来说是个好主意,因为空对象模式通常是救星,对于集合来说,空集合在语义上通常与 null 类似)
2)如果您不控制该方法,请编写一个安全的扩展方法,该方法将在 null 的情况下返回空列表,例如
List<AttendanceType> SafeAttendanceList(this AttendanceBALType bal, RollNumber rn)
{
return bal.GetAttendanceListOf(rn) ?? new List<AttendanceType>();
}
然后将其称为:
_AttendedDays = new AttendanceBAL()
.SafeAttendanceListOf(q._RollNumber)
.Where(date => date != null)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)