Comment puis-je obtenir que Dapper mappe un int sur une propriété booléenne

.net dapper

Question

J'ai cette classe ...

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

    public bool Selected { get; set; }
}

puis utilisez dapper pour tenter de créer une liste comme celle-ci ...

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

qui renvoie un résultat comme celui-ci ....

id  selected
 9         0
10         1
11         1
12         0

Mais quand le code ci-dessus est exécuté, je reçois une erreur

[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

Je vais créer une propriété "Traduire" pour le moment, mais est-ce un cas d'utilisation inhabituel?

Réponse acceptée

Je ne suis pas sûr que ce soit la meilleure façon de le faire, mais ça devrait faire l'affaire:

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

(Pour être honnête, je ne suis pas convaincu que votre T2.id IS NOT NULL AS selected clause T2.id IS NOT NULL AS selected est légale en premier lieu, mais si vous dites que cela fonctionne, alors je vais vous répondre!)




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi