簡體   English   中英

精巧的建築參數列表

[英]Dapper building parameter list

我有這門課:

public class Parameters
{
    public string UserId {get;set;}
    public string OrgId {get;set;}
    public string Roles {get;set;}
}

它從JSON字符串反序列化。 所以一些屬性為null

建立params列表以傳遞給Dapper的最佳方法是什么?

目前,我在SQL語句末尾構建params字符串的邏輯如下所示:

var parameters = string.Empty;
var parametersObj = new { };
if (query.Parameters != null)
{
    if (!string.IsNullOrWhiteSpace(query.Parameters.UserId))
    {
        parameters = string.Format("{0} UserId = @UserId", parameters);
        // parametersObj.UserId = 
    }

    if (!string.IsNullOrWhiteSpace(query.Parameters.OrganisationIdentifier))
    {
        parameters = string.Format("{0}, OrganisationIdentifier = @OrganisationIdentifier", parameters);
    }

    if (!string.IsNullOrWhiteSpace(query.Parameters.Roles))
    {
        parameters = string.Format("{0}, Roles = @Roles", parameters);
    }
}

var sqlString = string.Format("exec {0} {1}", query.DbObjectName, parameters);

conn.QueryAsync<dynamic>(sqlString, )

正如您在parametersObj看到的那樣,我采用了動態構建對象的JavaScript方式。 如果我用dynamic而不是對象做到這一點 - 它仍然可以工作嗎?

例:

var parameters = string.Empty;
dynamic parametersObj = new { };
if (query.Parameters != null)
{
    if (!string.IsNullOrWhiteSpace(query.Parameters.UserId))
    {
        parameters = string.Format("{0} UserId = @UserId", parameters);
        parametersObj.UserId = query.Parameters.UserId;
    }

    if (!string.IsNullOrWhiteSpace(query.Parameters.OrganisationIdentifier))
    {
        parameters = string.Format("{0} OrganisationIdentifier = @OrganisationIdentifier ", parameters);
        parametersObj.OrganisationIdentifier= query.Parameters.OrganisationIdentifier;
    }

    if (!string.IsNullOrWhiteSpace(query.Parameters.Roles))
    {
        parameters = string.Format("{0} Roles = @Roles", parameters);
        parametersObj.Roles= query.Parameters.Roles;
    }
}

var sqlString = string.Format("exec {0} {1}", query.DbObjectName, parameters);

conn.QueryAsync<dynamic>(sqlString, parametersObj);

我認為第二個例子將在您改變時起作用

dynamic parametersObj = new {};

dynamic parametersObj = new ExpandoObject();

和查詢

conn.QueryAsync(sqlString, new 
{
    UserId = parametersObj.UserId,
    ...
};

注意:填寫動態對象就好

conn.QueryAsync(sqlString, parametersObj);

會引起錯誤

無法動態分派擴展方法

您無需執行任何操作:只需將對象作為參數傳遞即可。 Dapper只傳遞它可以在查詢中識別的屬性/參數......即使它全部傳遞它們:它理解為null。

對象很好。

...QueryAsync(sql, query.Parameters)...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM