带有 Dapper 的 SQL Server
List<string> valueList = new List<string> { "20230626", "20230808"};
string sql = "SELECT * FROM MyTable WHERE @Values is null OR Value IN @Values";
var result = connection.Query<dynamic>(sql, new { Values = valueList });
SqlException 在需要条件的上下文中指定的非布尔类型表达式,靠近“,”。
如果是这样,那么就可以了
List<string> valueList = null
不进行NULL检查,工作正常
SELECT * FROM MyTable WHERE Value IN @Values
1。 Dapper 使用 IN 参数时是否会重写查询?
是的这正是它的作用。如果您有一个大型数据集,这是您应该避免这种情况的原因之一:SQL Server 中的最大参数数量是 2100,在此之前您就会遇到性能问题。
2。是否有不使用动态 SQL 或表值参数或类似参数的解决方法?
表值参数是理想的选择。 这些 答案展示了如何使用它,非常简单。
否则,您可以执行以下操作:
var valueList = new List<string> { "20230626", "20230808"};
string sql = @"
SELECT *
FROM MyTable
WHERE @ValuesEmpty = 1
OR Value IN @Values;
";
using var result = connection.Query<dynamic>(sql, new { Values = valueList, ValuesEmpty = valueList.Count == 0 });