【发布时间】:2018-06-09 02:40:57
【问题描述】:
我有一个使用 Dapper 的 c# mvc 应用程序。有一个列表页,它有几个可选的过滤器(以及分页)。用户可以选择(或不选择)几个(现在大约 8 个,但可能会增长)过滤器中的任何一个,每个过滤器都有一个下拉列表,用于从值和到值。因此,例如,用户可以选择类别“价格”并从值“$100”过滤到值“$200”。但是,我不知道用户事先过滤了多少个类别,并且并非所有过滤器类别都是相同的类型(一些 int、一些小数/双精度、一些 DateTime,尽管它们都以string 的形式出现在FilterRange)。
我正在尝试为此构建一个(相对)简单但可持续的 Dapper 查询。到目前为止,我有这个:
public List<PropertySale> GetSales(List<FilterRange> filterRanges, int skip = 0, int take = 0)
{
var skipTake = " order by 1 ASC OFFSET @skip ROWS";
if (take > 0)
skipTake += " FETCH NEXT @take";
var ranges = " WHERE 1 = 1 ";
for(var i = 0; i < filterRanges.Count; i++)
{
ranges += " AND @filterRanges[i].columnName BETWEEN @filterRanges[i].fromValue AND @filterRanges[i].toValue ";
}
using (var conn = OpenConnection())
{
string query = @"Select * from Sales "
+ ranges
+ skipTake;
return conn.Query<Sale>(query, new { filterRanges, skip, take }).AsList();
}
}
我不断收到错误消息“... filterRanges 不能用作参数值”
在 Dapper 中甚至可以做到这一点吗?我看到的所有IEnumerable 示例都是where in _,不适合这种情况。任何帮助表示赞赏。
【问题讨论】: