找到 0 行时,LINQ 查询崩溃



我的查询使我的程序运行时崩溃,如果查询在数据库中找不到任何行,它将崩溃并在查询上抛出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)。

最新更新