Dapper.net utilise la requête dans le dictionnaire

c# dapper

Question

mon sql est:

select (select count(*) from TblRMember where sex=1) male,
 (select count(*) from TblRMember where sex=2) female,
 (select count(*) from TblRMember where sex=0) unkown

Je veux que Dapper.Net retourne un dictionnaire comme ceci:

Keys:male,female,nukown
Value:10,30,50

J'ai vu Comment mapper à un objet Dictionnaire à partir des résultats de la base de données en utilisant Dapper Dot Net? , mais ça ne peut pas marcher!

Comment utiliser ToDictionary ou autre moyen pour mettre en œuvre je veux

var myDictionary = sqlConnection.Query(strSql).ToDictionary(??);

Merci!

Réponse acceptée

Changez d'abord votre requête pour qu'elle soit unique:

select case when sex = 1 then 'male'
            when sex = 2 then 'female'
            when sex = 0 then 'unknown'
       end as sex, count(*) as cnt
from TblRMember
group by sex

comme je vois le sex est numérique, donc vous devez soit sélectionner par coumn avec le nom (sexname?) ou le changer dans votre code. Après ça:

var myDictionary = sqlConnection.Query(strSql)
                    .ToDictionary(x => x.sex.ToString(), x => (int)x.cnt);

Réponse populaire

string strSql = "SELECT DISTINCT TableID AS [Key],TableName AS [Value] FROM dbo.TS_TStuctMaster";
Dictionary<string,string> dicts = sqlConnection.Query<KeyValuePair<string,string>>(strSql).ToDictionary(pair => pair.Key, pair => pair.Value);

Vous pouvez utiliser des alias et des types forts.

Les alias sont les points clés qui correspondent aux attributs de type KeyValuePair Key et Value.

Il fonctionne sous fort typage et fonctionne bien.

Je n'aime pas le type dynamique. Cela apporte un désastre dans certaines situations. De plus, la boxe et le unboxing entraînent une perte de performance.




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