我的查询使我的程序运行时崩溃,如果查询在数据库中找不到任何行,它将崩溃并在查询上抛出notsupportedexception,如果它确实找到了一个,它将继续按应有的方式运行。我解决这个问题的方法是尝试一下,当它遇到异常时,如果有 0 行,请做我想做的事情,但我觉得必须有更好的方法来解决这个问题
编辑:先尝试或默认不起作用
var test = (from a in conn.vaccineringar
where a.Personnummer.Equals(personNummer) && a.Vaccin.Equals(vaccinId)
select a).First();
if(test != null)
{
return "No can do";
}
使用 FirstOrDefault()
而不是 First()
:
返回满足指定条件的序列的第一个元素,如果未找到此类元素,则返回该元素。
var test = (from a in conn.vaccineringar
where a.Personnummer.Equals(personNummer) && a.Vaccin.Equals(vaccinId)
select a).FirstOrDefault();
if(test != null)
{
return "No can do";
}
此外,您应该使用 ==
而不是 Equals
调用:
var test = (from a in conn.vaccineringar
where a.Personnummer == personNummer && a.Vaccin == vaccinId
select a).FirstOrDefault();
试试FirstOrDefault
。此方法返回与您的条件匹配的第一个元素,如果没有任何元素,则返回默认值,在您的情况下为 null
。因此,这样您就不会收到任何错误。
var test = (from a in conn.vaccineringar
where a.Personnummer.Equals(personNummer) && a.Vaccin.Equals(vaccinId)
select a).FirstOrDefault();
if(test != null)
{
return "No can do";
}
它崩溃了,因为你正在使用.First()
,它指出:System.InvalidOperationException
如果源序列为空。
尝试改用.FirstOrDefault()
您可能想尝试 。FirstOrDefault() 而不是 。第一()。
这将提供第一个值或默认值(在本例中可能为 null)。