当参数类型是IEnumerable时,有没有办法检查null?我知道Dapper会将list参数转换为参数化查询,所以我怀疑这就是为什么list参数不能被检查为null的原因但是我想知道是否有办法实现这种行为.
我的想法是做这样的事情:
select * from Table1 where (@ids IS NULL OR id in @ids)
Run Code Online (Sandbox Code Playgroud)
现在该查询抛出SqlException并显示消息:必须声明标量变量"@ids".')'附近的语法不正确.
这id in @ids是一种被小巧玲珑识别并被视为扩展的模式 - 因此根据输入中的项目数量ids,这可能会成为以下之一:
(1 = 0) -- empty sequence
(id = @ids_0) -- sequence with 1 element
(id in (@ids_0, @ids_1, ...)) -- sequence with multiple elements
Run Code Online (Sandbox Code Playgroud)
正因为如此,扩建后,也就是没有任何@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();
Run Code Online (Sandbox Code Playgroud)
where Id in @ids or 0=@listCount
Run Code Online (Sandbox Code Playgroud)
进而
var data = conn.Query<SomeType>(sb.ToString(), new { ids, listCount=ids.Count }).ToList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2063 次 |
| 最近记录: |