gpt4 book ai didi

parameters - 在Dapper中检查null是否为list参数

转载 作者:行者123 更新时间:2023-12-04 07:03:29 25 4
gpt4 key购买 nike

当参数类型为IEnumerable时,是否可以检查null?我知道Dapper会将list参数转换为参数化查询,所以我怀疑这就是为什么无法检查list参数为null的原因,但我想知道是否有一种方法可以实现该行为。

想法是做这样的事情:

select * from Table1 where (@ids IS NULL OR id in @ids)

现在,该查询将引发SqlException消息:必须声明标量变量“@ids”。
')'附近的语法不正确。

最佳答案

id in @ids是一种可被dapper识别并视为扩展的模式-因此,根据您输入的ids中的项目数,该模式可能成为以下之一:

(1 = 0) -- empty sequence
(id = @ids_0) -- sequence with 1 element
(id in (@ids_0, @ids_1, ...)) -- sequence with multiple elements

因此,在扩展之后,没有 @ids参数/变量-因此 @ids IS NULL无法正常工作。因此,我建议在您的情况下执行此操作的最佳方法很简单:不要在tsql中添加该部分。例如:
var sql = new StringBuilder("select * from Table1");
if(ids != null && ids.Any())
{
sql.Append(" where id in @ids");
}
var data = conn.Query<SomeType>(sb.ToString(), new { ids }).ToList();

关于parameters - 在Dapper中检查null是否为list参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18690395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com