Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何让dapper将int映射到布尔属性_.net_Dapper - Fatal编程技术网

.net 如何让dapper将int映射到布尔属性

.net 如何让dapper将int映射到布尔属性,.net,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

我有这门课

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 });
但当执行上面的代码时,我得到一个错误

[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
[InvalidCastException:指定的强制转换无效。]
反序列化3D3C9260-abcb-4964-97c1-4a4e66b786d3(IDataReader)+354
[DataException:分析第2列时出错(选定项=0-Int64)]
C:\Projects\Web\SqlMapper.cs:1685中的Dapper.SqlMapper.ThrowDataException(Exception ex,Int32索引,IDataReader阅读器)
反序列化3D3C9260-abcb-4964-97c1-4a4e66b786d3(IDataReader)+432
C:\Projects\Web\Source\SqlMapper.cs:608中的Dapper.d\u 13`1.MoveNext()
System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)+327
System.Linq.Enumerable.ToList(IEnumerable`1源)+58
C:\Projects\Web\Source\SqlMapper.cs:538中的Dapper.SqlMapper.Query(IDbConnection cnn、字符串sql、对象参数、IDBTransactionTransaction、布尔缓冲、可为null的`1 commandTimeout、可为null的`1 commandType)

我现在要创建一个“Translating”属性,但这是一个不寻常的用例吗

我不确定这是否是最好的方法,但它应该做到:

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

(老实说,我不相信您的
T2.id不是空的,因为selected
子句首先是合法的T-SQL,但是如果您说它正在工作,那么我相信您的话!)

您的表是什么样子的,您使用的是什么操作系统版本?我在我的系统上测试了上面的代码,并且可以使用dapper将int值映射为布尔值而不会出现问题。
SELECT T1.id, CAST(CASE WHEN T2.id IS NULL THEN 0 ELSE 1 END AS BIT) AS selected
FROM ...