La función IEnumerable Zip no funciona en tipos decimales, pero sí para otros

.net c# dapper sql visual-studio

Pregunta

Estoy usando la función zip para unir dos objetos IEnumerable en una aplicación C # en Visual Studio. Tengo el siguiente código:

static void Main(){

    using (var conn = new SqlConnection(connectionString)){
          conn.Open();

          IEnumerable<string> tmp1 = conn.Query<string>("SELECT NAME FROM Table1");
          IEnumerable<string> tmp2 = conn.Query<string>("SELECT Type FROM Table1");
          IEnumerable<decimal> mock1 = conn.Query<decimal>("SELECT value1 FROM mockData1");
          IEnumerable<decimal> mock2 = conn.Query<decimal>("select value2 FROM mockData2");

          foreach (var item in tmp1.Zip(tmp2, (a, b) => new { a, b })){
             Console.WriteLine(item.a);
             Console.WriteLine(item.b);
             Console.ReadKey();
          }
    }

}

Cuando ejecuto el código anterior, la consola muestra lo siguiente:

CorrectName1
CorrectType1
CorrectName2
CorrectType2
....

que es lo que esperaba Sin embargo, cuando hago los siguientes cambios:

foreach (var item in mock1.Zip(mock2, (a, b) => new { a, b })){
        Console.WriteLine(item.a);
        Console.WriteLine(item.b);
        Console.ReadKey();
}

el programa omite por completo la salida de la consola y no hay errores en la lista de errores.

Esencialmente, ¿por qué el programa funcionaría como se esperaba para IEnumerables de tipo string y no para IEnumerables de tipo decimal? Antes de preguntar, he verificado las dos consultas a través de Management Studio y son correctas, y puedo iterar sobre mock1 y mock2 en los bucles foreach que involucran solo las dos colecciones de forma independiente, pero por alguna razón parece que el zip la función falla para IEnumerable <decimal>.

EDITAR: Aquí hay dos bucles foreach para confirmar mi hipótesis de que las consultas no son malas:

foreach (var item in mock1){
    Console.WriteLine(item);
    Console.ReadKey();
}

Demostración de salida para mock1:

Value from mock1 (1)
Value from mock1 (2)
...

/ *** /

foreach (var item in mock2){
    Console.WriteLine(item);
    Console.ReadKey();
}

Demostración de salida para mock2:

Value from mock2 (1)
Value from mock2 (2)
...

Respuesta aceptada

Supongo que su base de datos no está devolviendo datos para las consultas. Funciona bien al reemplazar la consulta con matrices :

void Main()
{
    IEnumerable<decimal> mock1 = new decimal[] { 1, 2, 3 };
    IEnumerable<decimal> mock2 = new decimal[] { 4, 5, 6 };

    foreach (var item in mock1.Zip(mock2, (a, b) => new { a, b }))
    {
        Console.WriteLine(item.a);
        Console.WriteLine(item.b);
        Console.Read();
    }
}

1

4

2

5

3

6


Respuesta popular

Fue mi culpa: tenía diez puntos de datos para ambos, mockData1 y mockData2, pero durante las inserciones manuales de SQL, agregué accidentalmente los 20 a mockData1 y ninguno a mockData2.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué