【发布时间】:2021-08-29 09:41:07
【问题描述】:
我正在做分页。我现在拥有的是:
public void GetAllDevices(int siteId, List<int> deviceTypes, int rowsOffset, int pageSize)
{
var param = new
{
SiteId = siteId,
RowsOffset = rowsOffset,
PageSize = pageSize
};
string sqlQuery = @"SELECT * FROM device WHERE site_id = @SiteId
ORDER BY site_id
OFFSET @RowsOffset ROWS
FETCH NEXT @PageSize ROWS ONLY";
var response = await conn.QueryAsync<Model.Device>(sqlQuery, param);
}
所有非常标准的东西。现在,用户还可以对设备类型进行多次过滤,所以如果我要编写原始 SQL,它将如下所示:
SELECT * FROM device WHERE site_id = @SiteId
WHERE device_type_id = 1 OR device_type_id = 2 OR device_type_id = 3
ORDER BY site_id
OFFSET @RowsOffset ROWS
FETCH NEXT @PageSize ROWS ONLY
我的问题是如何编写 WHERE 子句的参数?我在这里添加什么:
var param = new
{
SiteId = siteId,
RowsOffset = rowsOffset,
PageSize = pageSize
};
我正在使用 Dapper 和 PostgreSQL 13,在 .NET5 上运行。
附加信息: 请参阅已接受的答案以了解如何执行此操作。请注意,它适用于 SQL Server,但不适用于 PostgreSQL。 PostgreSQL 不支持“IN”,所以你必须改为“ANY”。参考:Dapper.net "where ... in" query doesn't work with PostgreSQL
【问题讨论】: