c# - 如何从 Dapper 查询而不是 default(T) 返回 null?

标签 c# stored-procedures null dapper

我正在使用 Dapper通过存储过程进行一些只读数据库调用。我有一个查询,要么返回 1 行,要么什么都不返回。

我正在像这样使用 Dapper:

using (var conn = new SqlConnection(ConnectionString))
{
    conn.Open();

    return conn.Query<CaseOfficer>("API.GetCaseOfficer", 
        new { Reference = reference }, 
        commandType: CommandType.StoredProcedure).FirstOrDefault();
}

返回的 CaseOfficer 对象如下所示:

public class CaseOfficer
{
    public string Title { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public string Telephone { get; set; }
}

然后通过 ASP.NET Web API 应用程序将其作为 JSON 返回。

当存储过程返回结果时,我得到以下结果:

{
    title: "Mr",
    firstName: "Case",
    lastName: "Officer",
    email: "test@example.com",
    telephone: "01234 567890"
}

但是当它什么都不返回时我得到:

{
    title: null,
    firstName: null,
    lastName: null,
    email: null,
    telephone: null
}

我怎样才能让 Dapper 返回 null(这样我就可以检查并用 404 响应),而不是默认值(CaseOfficer)?

最佳答案

如果您的 SP 没有返回一行,那么 dapper 也不会返回一行;所以首先要检查的是:您的 SP 是否返回了一个空行?一排所有 null ?还是返回了 0 行?

现在,假设没有返回任何行,如果 CaseOfficerclass,如果 CaseOfficerstruct,则为默认实例。所以接下来:检查 CaseOfficer 是一个 (我想不出有什么理智的理由可以成为一个 struct)。

但是:使用 FirstOrDefault 的 dapper 通常已经您想要的了。

关于c# - 如何从 Dapper 查询而不是 default(T) 返回 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11720611/

相关文章:

c - 设置字符串为 NULL

c# - 那种异步的感觉——httpclient 和 mvc 线程阻塞

mysql - SQL 过程语法

oracle - 如何使用 NHibernate 以编程方式调用 Oracle 存储过程?

c - 空指针地址

ios - HTTP GET 请求在 iOS 模拟器中有效,但在 iPhone 设备上无效

c# - 将代码中的 userid 和 guid 提供给 signalr 服务器

c# - 这是表达式树的正确用法吗?

c# - 母版页和内容页中的 ScriptManager

jquery - 为什么即使参数正确,存储过程也不返回 Nothing?