Dapper.net utiliza la consulta en el diccionario

c# dapper

Pregunta

mi sql es:

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

Quiero que Dapper.Net devuelva un Dictinary como este:

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

He visto cómo mapear un objeto de diccionario a partir de los resultados de la base de datos usando Dapper Dot Net? ¡pero eso no puede funcionar!

Cómo usar ToDictionary o de otra forma para implementar Quiero

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

¡Gracias!

Respuesta aceptada

Primero cambie su consulta para que sea única:

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

como veo, el sex es numérico, ¿por lo que tiene que seleccionar por coumn con nombre (sexname?) o cambiarlo en su código. Después de esto:

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

Respuesta popular

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

Puede usar alias y tipos fuertes.

Los alias son los puntos clave, que coinciden con los atributos de KeyValuePair tipo Key y Value.

Funciona bajo un fuerte tipado y funciona bien.

No me gusta el tipo dinámico. Trae desastres en ciertas situaciones. Además, el boxeo y el unboxing trae pérdida de rendimiento.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow