如何使用FirstOrDefault避免对象引用未设置为对象实例错误
本文关键字:设置 对象 实例 错误 对象引用 何使用 FirstOrDefault | 更新日期: 2024-07-27 16:19:32
这是我的类:
public class Employee
{
public int EmployeeId { get; set; }
public int Skillssetpoints { get; set; }
public string Name { get; set; }
public string EmployeeCode { get; set; }
public Nullable<System.DateTime> Date { get; set; }
}
代码:
场景1:
var data=context.Employee.ToList(); //Get all employee records.
//Filter records by employee code(Emp01) and fetch single employee code.for eg:Emp01
var empCode = data.FirstOrDefault(t =>(t.EmployeeCode.Trim() == Model.EmployeeCode.Trim())).EmployeeCode;
这里,如果找不到与Emp01
匹配的对象,则获取错误对象引用,该引用未设置为对象的实例,但修复了以下代码:
var Single = data.FirstOrDefault(t =>(t.EmployeeCode.Trim() == Model.EmployeeCode.Trim()));
if(single!=null)
{
var data=Single.EmployeeCode;
//Rest other code.
}
场景2:
var data=context.Employee.ToList(); //Get all employee records.
//Fetch List of employee with Employee code:Emp01
var list= data.FirstOrDefault(t =>(t.EmployeeCode.Trim() == Model.EmployeeCode.Trim()));
在我的数据对象中,如果任何EmployeeCode
是null
,那么我会得到这个错误:
错误:对象引用未设置为对象实例
修复了以下问题:
var list= data.FirstOrDefault(t => (t.EmployeeCode != null) && (t.EmployeeCode.Trim() == Model.EmployeeCode.Trim()));
对于我的第二个场景,当我获取员工的所有记录并按员工代码进行筛选时,我一开始没有添加这个null条件,因为我让所有员工记录都没有任何null的员工代码,一切都很好,但在任何时候,员工代码都变为null并出现了这个错误。所以将来我想避免这个错误。
所以我只想知道有没有更好的方法来处理这两种情况???
对于场景1,您可以编写如下内容:
var employees = context.Employee.ToList();
var data = employees.Where(t => t.EmployeeCode.Trim() == Model.EmployeeCode.Trim())
.Select(t => t.EmployeeCode)
.FirstOrDefault();
if(data != null)
{
//Rest other code.
}
对于场景2,您可以添加一个额外的where来过滤null。无论你如何切片,你都需要检查,但至少在我看来,拆分过滤更好:
var list= data
.Where(d => d != null)
.FirstOrDefault(t => t.EmployeeCode.Trim() == Model.EmployeeCode.Trim());
var employees = context.Employee.ToList();
var result = employees.Where(t => (t.EmployeeCode ?? "").Trim() == (Model.EmployeeCode ?? "").Trim())
.Select(t => t.EmployeeCode).FirstOrDefault();