You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core MVC EF使用FromSqlRaw无数据时报错:Sequence contains no elements

解决EF Core FromSqlRaw无记录时抛出“Sequence contains no elements”的问题

你的问题出在LINQ方法的选择上——当前泛型方法里应该用了First()或Single()这类会强制要求序列必须存在元素的方法,当查询无返回记录时,这类方法就会抛出Sequence contains no elements异常。

要实现无记录时返回空模型的需求,只需要把这些方法替换成FirstOrDefault()或SingleOrDefault()即可,这两个方法在序列为空时会返回对应类型的默认值(引用类型返回null,值类型返回对应默认值如0、false等)。

错误写法示例

public T ExecuteGenericRow<T>(string sql, params object[] parameters) where T : class
{
    // 无记录时会抛出Sequence contains no elements
    return _context.Set<T>().FromSqlRaw(sql, parameters).First();
}

修正后的写法

// 用FirstOrDefault()替代First(),返回可空的泛型类型
public T? ExecuteGenericRow<T>(string sql, params object[] parameters) where T : class
{
    return _context.Set<T>().FromSqlRaw(sql, parameters).FirstOrDefault();
}

额外注意事项

  • 如果你的泛型类型是值类型(比如int、DateTime),FirstOrDefault()会返回值类型的默认值而非null。如果需要返回null,要调整泛型约束并使用可空值类型:
    public T? ExecuteGenericRow<T>(string sql, params object[] parameters) where T : struct
    {
        return _context.Set<T>().FromSqlRaw(sql, parameters).FirstOrDefault();
    }
    
  • 逻辑区分:如果你的查询业务规则确保最多返回一条记录,用SingleOrDefault()更贴合语义;如果允许多条记录且只取第一条,用FirstOrDefault()更高效。

内容的提问来源于stack exchange,提问作者Diego

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 21:12:45