Comment puis-je obtenir un entier nullable avec dapper?

c# dapper sql-server-2008

Question

Si je veux obtenir un groupe de lignes contenant une seule colonne de int , en utilisant Dapper, et il est possible que cet ensemble de résultats soit vide. Quelle est la meilleure façon d'utiliser Dapper pour interroger ces données?

Par exemple, si j'ai la méthode suivante qui renvoie ce que je veux:

public void int[] GetInts()
{

    conn.Query<int?>("select 123 where 1=1")
        .Where(x=> x.HasValue)
        .Select(x => x.Value)
        .ToArray();
}

Si je change la ligne à ceci:

conn.Query<int>("select 123 where 1=0").ToArray();

Je reçois une erreur de casting quand il n'y a pas de résultats.

La trace de pile est ci-dessous et l'exception est simplement une référence d'objet non définie à l'instance d'un objet lors de la conversion (T)next :

at Dapper.SqlMapper.<QueryInternal>d__13`1.MoveNext() in .\SqlMapper.cs:line 611
 at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)   
  at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)    
   at Dapper.SqlMapper.Query[T](IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable`1 commandTimeout, Nullable`1 commandType) in .\SqlMapper.cs:line 539

Réponse acceptée

Mon problème s'est avéré être que je faisais un LEFT JOIN dans le code, mais pendant que j'essayais de reproduire l'erreur, j'utilisais un INNER JOIN , donc, je ne pouvais pas reproduire le même comportement. Avec le LEFT JOIN , une seule ligne avec la valeur NULL été renvoyée, ce qui explique pourquoi une erreur de casting est NULL entre NULL et int .


Réponse populaire

Eh bien, le Where et Select ne font pas de sens si elle est un entier. Assez sûr de vouloir les supprimer.

conn.Query<int>("select 123 where 1=0")
    .ToArray();

Avez-vous des problèmes lorsque vous faites cela?




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