Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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# 如何使用FirstOrDefault避免对象引用未设置为对象错误的实例?_C#_.net_Asp.net Mvc_Linq - Fatal编程技术网

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();