可为空的十进制字段的Dapper查询不起作用

本文关键字:Dapper 查询 不起作用 字段 十进制 | 更新日期: 2023-09-27 18:03:37

我有一个表,其中包含一个可为空的十进制(12,4)列。当我像这样查询时:

const string sqlQuery = "SELECT Id From DummyTable WHERE Price = @Price";
var sqlParameter = new { Price = (decimal?)null };

这个查询返回0条记录。但是当我将查询更改为:

const string sqlQuery = "SELECT Id From DummyTable WHERE Price IS NULL;

这个语法可以工作。那么如何查询带参数的可空十进制列呢?谢谢。

可为空的十进制字段的Dapper查询不起作用

这不是很吸引人,但你可以尝试这样做:

[Test]
public void NullParamTest()
{
    _connection.Execute(@"drop table foo; 
                          create table foo(id int not null,price decimal(12, 4) null)");
    _connection.Execute("insert into foo values(1, null)");
    _connection.Execute("insert into foo values(2, 12.99)");
    const string sql = @"select price from foo 
                        where coalesce(price, -1) = coalesce(@Price, -1)";
    var result = _connection.Query<decimal?>(sql,new { Price = (decimal?)null }).FirstOrDefault();
    Assert.That(result, Is.Null);
    result = _connection.Query<decimal?>(sql,new { Price = 12.99 }).FirstOrDefault();
    Assert.That(result, Is.EqualTo(12.99));
}

假设"Price"不能为负…