intをブール値のプロパティにマップするためにdapperをどのように取得するのですか?

.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

今は "翻訳中"のプロパティを作成しますが、これは普通ではないユースケースですか?

受け入れられた回答

私はこれが最良の方法であるかどうかはわかりませんが、それはトリックを行うべきです:

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 selectedT2.id IS NOT NULL AS selectedはないと確信しています。 T2.id IS NOT NULL AS selected句は正当なT-SQLですが、それがうまくいっていると言えば、私はあなたの言葉を受け取ります!)



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow