如何从Dapper查询而不是默认(T)返回null?

Jam*_*imm 7 c# null stored-procedures 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();
}
Run Code Online (Sandbox Code Playgroud)

返回的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; }
}
Run Code Online (Sandbox Code Playgroud)

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

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

{
    title: "Mr",
    firstName: "Case",
    lastName: "Officer",
    email: "test@example.com",
    telephone: "01234 567890"
}
Run Code Online (Sandbox Code Playgroud)

但当它返回什么我得到:

{
    title: null,
    firstName: null,
    lastName: null,
    email: null,
    telephone: null
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能让Dapper返回null(所以我可以检查并回复404),而不是默认(CaseOfficer)?

Mar*_*ell 7

如果你的SP没有返回一行,那么dapper将不会返回一行; 所以首先要检查一下:您的SP是否可能返回空行?所有null的一排?或者它返回0行?

现在,返回假设没有行FirstOrDefault(标准LINQ到对象的事情)将返回null如果CaseOfficerclass,或者如果默认实例CaseOfficer是一个struct.所以接下来:检查CaseOfficer是一个class(我不能想到任何理智的原因struct).

但是:小巧玲珑的FirstOrDefault人通常会你想做的事.

  • 当 T 是可空类型(例如 int?)时,Dapper 是否也返回 null? (2认同)