Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.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# 当不应存在任何行时,实体框架返回非null_C#_Entity Framework - Fatal编程技术网

C# 当不应存在任何行时,实体框架返回非null

C# 当不应存在任何行时,实体框架返回非null,c#,entity-framework,C#,Entity Framework,我有以下疑问。如果行不存在,但它始终有一个值,我希望var为null。我做错了什么 var results = dbContext.Users.Where(m => UserName == userName && Password == password).First(); if (results !=null) return true; 您应该像这样编辑代码: var results = dbContext.Users.Where(m => m.Use

我有以下疑问。如果行不存在,但它始终有一个值,我希望var为null。我做错了什么

var results = dbContext.Users.Where(m => UserName == userName && Password == password).First();

if (results !=null)
     return true;

您应该像这样编辑代码:

var results = dbContext.Users.Where(m => m.UserName == userName && m.Password == password).FirstOrDefault();
解释
由于diff可能一眼就看不见,因此查询的问题是根本不使用m,只要至少有一个用户,results变量就不会为null。这也是.First在没有匹配项时不抛出异常的原因。这显然要求用户名和用户名有相同的值,密码也有相同的值,但我不认为还有其他可能的解释可以解释。

您应该像这样编辑代码:

var results = dbContext.Users.Where(m => m.UserName == userName && m.Password == password).FirstOrDefault();
解释 由于diff可能一眼就看不见,因此查询的问题是根本不使用m,只要至少有一个用户,results变量就不会为null。这也是.First在没有匹配项时不抛出异常的原因。显然,这需要UserName和UserName变量具有相同的值,密码也相同,但我不认为还有其他可能的解释可以构建。

该函数就是您正在寻找的函数。如果有一个或多个结果,它将返回该结果。如果没有结果,它将返回默认值,对于用户对象,该值为null

var results = dbContext.Users.Where(m => UserName == userName && Password == password)
                             .FirstOrDefault();
该函数就是您正在寻找的函数。如果有一个或多个结果,它将返回该结果。如果没有结果,它将返回默认值,对于用户对象,该值为null

var results = dbContext.Users.Where(m => UserName == userName && Password == password)
                             .FirstOrDefault();
使用FirstOrDefault,如果行不存在,它将返回null

  var results = dbContext.Users.Where(m => m.UserName == userName && m.Password == password)
                                        .FirstOrDefault();

    if (results !=null)
         return true;
使用FirstOrDefault,如果行不存在,它将返回null

  var results = dbContext.Users.Where(m => m.UserName == userName && m.Password == password)
                                        .FirstOrDefault();

    if (results !=null)
         return true;

若您希望Where的结果不返回任何结果,因为First会对空集合抛出异常,那个么您会看到一个值,这让我感到惊讶。您可以一起删除Where方法,并将谓词放在FirstOrDefault中,使其更清晰,如下所示:

var results = dbContext.Users.FirstOrDefault(m => UserName == userName && Password == password);

若您希望Where的结果不返回任何结果,因为First会对空集合抛出异常,那个么您会看到一个值,这让我感到惊讶。您可以一起删除Where方法,并将谓词放在FirstOrDefault中,使其更清晰,如下所示:

var results = dbContext.Users.FirstOrDefault(m => UserName == userName && Password == password);

var results=dbContext.Users.FirstOrDefaultm=>UserName==UserName&&Password==Password;看来大多数回复者都没有抓住你问题的重点。如果没有与条件匹配的行,第一个方法将抛出异常。如果您在结果中得到一个非空值,它可能是单数的,因为您只需要一个,那么必须有一行满足您的条件。您的数据库中是否有多行具有相同的用户名和密码?var results=dbContext.Users.FirstOrDefaultm=>UserName==UserName&&Password==Password;看来大多数回复者都没有抓住你问题的重点。如果没有与条件匹配的行,第一个方法将抛出异常。如果您在结果中得到一个非空值,它可能是单数的,因为您只需要一个,那么必须有一行满足您的条件。您的数据库中是否有多行具有相同的用户名和密码?我认为,您应该将条件移到FirstOrDefault方法中。虽然这是我常用的查询方法,但我认为它不会以任何方式影响结果不为空,也不会影响结果。只是我认为tnat变量获取这个条件的第一个元素更可读,然后获取这个条件的元素,然后获取第一个元素。无论如何,这是书面答案。虽然我同意更好的可读性,但我不认为这是正确的答案,因为将.First改为.FirstOrDefault会影响结果,如果数据库中不应该有任何匹配项,则结果不会为null。这就是将m放入并使用FirstOrDefault。非常感谢。我认为,您应该将条件移到FirstOrDefault方法中。虽然这是我常用的查询方式,但我不认为它会以任何方式影响结果不为空它不会影响结果。只是我认为tnat变量获取这个条件的第一个元素更可读,然后获取这个条件的元素,然后获取第一个元素。无论如何,这是书面答案。虽然我同意更好的可读性,但我不认为这是正确的答案,因为将.First改为.FirstOrDefault会影响结果,如果数据库中不应该有任何匹配项,则结果不会为null。这就是将m放入并使用FirstOrDefault。非常感谢。