2 回答

TA貢獻(xiàn)1946條經(jīng)驗 獲得超3個贊
如果您確實想要像匿名類型一樣具有參數(shù),則可以使用ExpandoObject:-
dynamic params = new ExpandoObject();
if (!string.IsNullOrWhiteSpace(username)) {
params.Username = username;
}
或者,如果您想要一個數(shù)組(并且您事先不知道長度),請使用List<string>:-
var paramlist = new List<string>();
if (!string.IsNullOrWhiteSpace(username)) {
paramlist.Add("username");
}
var params = paramlist.ToArray();
但是,如果您正在構(gòu)造WHERE子句,則無論如何,您的 SQL 語句中將始終具有固定數(shù)量的參數(shù)(或者您也必須動態(tài)構(gòu)造它)。
動態(tài)構(gòu)建過濾查詢時可以使用的另一種方法是:-
SELECT *
FROM vwweb_Orders
WHERE 1=1
AND (@custid IS NULL OR CustFID = @custid)
AND (@xyz IS NULL OR XYZ = @xyz)
-- etc
然后向您的調(diào)用提供所有參數(shù)QueryAsync,如果有任何參數(shù)為空,則它們將在WHERE子句中被跳過。

TA貢獻(xiàn)1864條經(jīng)驗 獲得超6個贊
也許您可以編寫查詢來首先檢查空/空/非零值,否則按如下方式評估實際值:
public async Task<List<Order>> Execute(OrderQuery query)
{
var sql = $@"SELECT
...
FROM vwweb_Orders
WHERE @{nameof(query.CustomerId)} <= 0 OR customer_id = @{nameof(query.CustomerId)}
AND ISNULL(@{nameof(query.CustomerName)}, '') = '' OR customer_name = @{nameof(query.CustomerName)}";
return await conn.QueryAsync<Order>(sql, new { query.CustomerId, query.CustomerName});
}
public class OrderQuery
{
public int CustomerId { get; set; }
public string CustomerName { get; set; }
}
public class Order
{
}
- 2 回答
- 0 關(guān)注
- 139 瀏覽
添加回答
舉報