Después de actualizar de Visual Studio 2010 a 2012, el código comenzó a lanzar "ArgumentOutOfRangeException - El índice estaba fuera de rango. Debe ser no negativo y menor que el tamaño de la colección.Nombre del parámetro: índice "en consultas de Linq usando uniones.Linq to EF Join throws "El índice estaba fuera de rango" después de la actualización de VS2010 a VS2012
El siguiente ejemplo sencillo hecho en LINQPad (usando un modelo de datos EF) me da la ArgumentOutOfRangeException:
void Main()
{
var iq1 = Customers.Select(ap => ap.ID);
var iq2 = iq1.Join(Customers.Select(ap => ap.ID),
a => a,
b => b,
(a, b) => new { a });
iq2.Dump();
}
Cambio del ejemplo anterior para devolver un objeto anónimo que contiene ambos lados de la combinación no da la ArgumentOutOfRangeException y da resultados como se esperaba:
void Main()
{
var iq1 = ActionPlans.Select(ap => ap.ID);
var iq2 = iq1.Join(ActionPlans.Select(ap => ap.ID),
a => a,
b => b,
(a, b) => new { a, b });
iq2.Dump();
}
Ok, así que por alguna razón tuviera que volver a ambos lados de la unión, pero entonces intentado el siguiente ejemplo usando un valor ficticio en cambio, que también ejecutó sin pr oblema:
void Main()
{
var iq1 = ActionPlans.Select(ap => ap.ID);
var iq2 = iq1.Join(ActionPlans.Select(ap => ap.ID),
a => a,
b => b,
(a, b) => new { a, x = 1 });
iq2.Dump();
}
Tomando el primer ejemplo y la adición de un ToList() para la primera consulta también hace ejecutar sin ningún problema:
void Main()
{
var iq1 = ActionPlans.Select(ap => ap.ID).ToList();
var iq2 = iq1.Join(ActionPlans.Select(ap => ap.ID),
a => a,
b => b,
(a, b) => new { a });
iq2.Dump();
}
Importante: Tratando la primera consulta en una estación de trabajo sin la actualización de Visual Studio 2012 funciona bien!
¿Alguien puede confirmar/explicar esta nueva "función"? :-)
Este error se ha presentado en [Linq to EF Join throws "El índice estaba fuera de rango" después de la actualización de VS2010 a VS2012] (https://connect.microsoft.com/VisualStudio/feedback/details/763986/linq- to-ef-join-throws-index-was-out-of-range-after-upgrade-from-vs2010-to-vs2012). Si puedes reproducirlo, díselo a Microsoft. Si una solución es importante para usted, entonces "invítala" allí. –