You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Dapper+PostgreSQL13时如何为SQL添加多个OR的WHERE条件参数

适配Dapper + PostgreSQL 13的设备类型筛选实现方案

1. 修改param参数对象

直接在匿名参数中新增DeviceTypes字段,传入接收到的设备类型列表即可:

var param = new
{
    SiteId = siteId,
    RowsOffset = rowsOffset,
    PageSize = pageSize,
    DeviceTypes = deviceTypes
};

2. 调整SQL查询语句

使用PostgreSQL原生支持的ANY语法实现数组匹配,效果等价于多个OR拼接的筛选逻辑:

SELECT * FROM device WHERE site_id = @SiteId
AND device_type_id = ANY(@DeviceTypes)
ORDER BY site_id
OFFSET @RowsOffset ROWS
FETCH NEXT @PageSize ROWS ONLY

可选:兼容无筛选的场景

如果需要支持用户未选择任何设备类型时返回所有类型设备,可以动态拼接WHERE条件:

var whereConditions = new List<string> { "site_id = @SiteId" };
// 仅当设备类型列表不为空时追加筛选条件
if (deviceTypes != null && deviceTypes.Any())
{
    whereConditions.Add("device_type_id = ANY(@DeviceTypes)");
}

string sqlQuery = $@"SELECT * FROM device 
                    WHERE {string.Join(" AND ", whereConditions)}
                    ORDER BY site_id
                    OFFSET @RowsOffset ROWS
                    FETCH NEXT @PageSize ROWS ONLY";

实现说明

Dapper会自动将.NET的List<int>类型参数转换为PostgreSQL可识别的int数组类型,ANY运算符可以直接判断字段值是否存在于数组中,既避免了手动拼接OR的繁琐,也不存在SQL注入风险,执行效率和原生编写的多OR语句一致。


内容的提问来源于stack exchange,提问作者Farid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 12:39:03