boolean 프로퍼티에 int를 매핑하려면 어떻게해야합니까?

.net dapper

문제

나는이 수업을 가지고 ...

public class MyDTO
{
    public int Id { get; set; }

    public bool Selected { get; set; }
}

그런 다음 dapper를 사용하여 다음과 같은 목록을 작성하십시오.

            var list = this.db.OpenConnection().Query<MyDTO>(
            @"SELECT T1.id, T2.id IS NOT NULL AS selected
            FROM     table1 T1
            LEFT
            JOIN     table2 T2 
            ON   T2.id = T1.id
            AND  Tl.id = @Id",
            new { Id = id });

이런 결과 세트를 반환합니다 ....

id  selected
 9         0
10         1
11         1
12         0

하지만 위의 코드를 실행하면 오류가 발생합니다.

[InvalidCastException: Specified cast is not valid.]
Deserialize3d3c9260-abcb-4964-97c1-4a4e66b786d3(IDataReader ) +354

[DataException: Error parsing column 2 (selected=0 - Int64)]
Dapper.SqlMapper.ThrowDataException(Exception ex, Int32 index, IDataReader reader) in     C:\Projects\Web\SqlMapper.cs:1685
Deserialize3d3c9260-abcb-4964-97c1-4a4e66b786d3(IDataReader ) +432
Dapper.<QueryInternal>d__13`1.MoveNext() in C:\Projects\Web\Source\SqlMapper.cs:608
System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +327
System.Linq.Enumerable.ToList(IEnumerable`1 source) +58
Dapper.SqlMapper.Query(IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable`1 commandTimeout, Nullable`1 commandType) in C:\Projects\Web\Source\SqlMapper.cs:538

지금은 "Translating"속성을 만들려고 합니다만,이 경우가 비정상적인 유스 케이스입니까?

수락 된 답변

이것이 최선의 방법인지 확실하지 않지만 트릭을해야합니다.

SELECT T1.id, CAST(CASE WHEN T2.id IS NULL THEN 0 ELSE 1 END AS BIT) AS selected
FROM ...

(솔직히 말해서, 나는 T2.id IS NOT NULL AS selected 아니라고 확신하지는 않는다. T2.id IS NOT NULL AS selected 이 합법적 인 T-SQL이기 때문에 처음에는 그렇지 않다. 그러나 당신이 그것을 작동한다고 말하면 나는 그것에 대해 당신의 말을 할 것이다!)



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.