C# 如何使用FirstOrDefault避免对象引用未设置为对象错误的实例?
这是我的班级:C# 如何使用FirstOrDefault避免对象引用未设置为对象错误的实例?,c#,.net,asp.net-mvc,linq,C#,.net,Asp.net Mvc,Linq,这是我的班级: 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> Dat
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; }
}
这里,如果未找到与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.
//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;
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()));
对于我的第二个场景,当我获取员工的所有记录并按员工代码进行筛选时,我一开始没有添加此空条件,因为我的所有员工记录都没有任何空员工代码,一切正常,但在任何时候员工代码都变为空并出现此错误。因此,我希望在将来避免这是一个错误
所以我只想知道有没有更好的方法来处理这两种情况???对于情况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来过滤空值。不管你如何分割它,你都需要检查,但是分割过滤更好,至少在我看来是这样的:
var list= data
.Where(d => d != null)
.FirstOrDefault(t => t.EmployeeCode.Trim() == Model.EmployeeCode.Trim());
你的确切问题是什么?你自己解决了这个问题。我没有得到你想要的。@BendEg:但我想要更好的方法来处理我所做的事情,因为如果你查看我的第二个场景,我在遇到错误后添加了空条件。如果我谈论我的第二个场景,那么之前我得到的是所有员工记录,其中员工代码不是空的,所以所有内容都是空的工作正常,但在这之后,当我的员工代码在任何记录中变为null时,我就得到了这个错误,因此在这之后,我添加了null条件来处理它。所以我只想用更好的方法来处理这个问题。使用
.ToList()可能是一种浪费当您只需要一个时,将所有记录加载到内存中。对于第二个场景,如果您不知道雇员代码在编写此代码时的某个点是空的。在知道OK雇员代码在某个时刻可以为NULL时,您已经考虑过NULL过滤器。编写代码的人应该知道雇员代码可以为NULL,不过。没有真正的方法可以避免空检查,您需要在代码中的某个点执行它。context.Employee.ToList()代码>太错误了。这将返回整个employee表。@KosalaW假设这是在访问数据库,那么是的-但这不是一个简单的问题given@KosalaW我同意你的看法,但它不是来自数据库。据我们所知,它可能来自API。如果我们沿着这条路走,我们可以完全忽略空检查
var employees = context.Employee.ToList();
var result = employees.Where(t => (t.EmployeeCode ?? "").Trim() == (Model.EmployeeCode ?? "").Trim())
.Select(t => t.EmployeeCode).FirstOrDefault();