nullable 십진수 필드에 대한 더 복잡한 쿼리가 작동하지 않습니다.

c# dapper orm

문제

Nullable Decimal (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;

이 구문은 작동합니다. 그렇다면 매개 변수를 사용하여 nullable decimal 열을 어떻게 쿼리 할 수 ​​있습니까? 감사.

수락 된 답변

매우 섹시하지는 않지만 다음과 같이 시도 할 수 있습니다.

[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));
}

"가격"이 음수가 될 수 없다고 가정하면 ...



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow