Tome la siguiente consulta LINQ como ejemplo. Por favor, no comenten el código en sí, ya que lo he escrito para ayudar con esta pregunta.Gran consulta de agrupamiento LINQ, lo que está sucediendo detrás de las escenas
La siguiente consulta LINQ utiliza un 'grupo por' y calcula la información de resumen. Como puede ver, hay numerosos cálculos que se están realizando sobre los datos pero cuán eficiente es LINQ detrás de las escenas.
var NinjasGrouped = (from ninja in Ninjas
group pos by new { pos.NinjaClan, pos.NinjaRank }
into con
select new NinjaGroupSummary
{
NinjaClan = con.Key.NinjaClan,
NinjaRank = con.Key.NinjaRank,
NumberOfShoes = con.Sum(x => x.Shoes),
MaxNinjaAge = con.Max(x => x.NinjaAge),
MinNinjaAge = con.Min(x => x.NinjaAge),
ComplicatedCalculation = con.Sum(x => x.NinjaGrade) != 0
? con.Sum(x => x.NinjaRedBloodCellCount)/con.Sum(x => x.NinjaDoctorVisits)
: 0,
ListOfNinjas = con.ToList()
}).ToList();
- ¿Cuántas veces se presenta la lista de los 'ninjas' se repiten a lo largo con el fin de calcular cada uno de los valores?
- ¿Sería más rápido emplear un bucle foreach para acelerar la ejecución de dicha consulta?
- Añadir '.AsParallel()' después de Ninjas dará como resultado alguna mejora en el rendimiento?
- ¿Existe alguna forma mejor de calcular la información veraniega para List?
Cualquier consejo es apreciado ya que usamos este tipo de código en todo nuestro software y realmente me gustaría obtener una mejor comprensión de lo que LINQ está haciendo debajo del capó (por así decirlo). Tal vez hay una mejor manera?
+1 para los ninjas. –
Es importante saber si 'Ninjas' es un' IEnumerable' o un 'IQueryable'. Si es anterior, se enumeraría exactamente una vez. Si es posterior, no hay enumeración para hablar; la consulta se compila en, por ejemplo, SQL directamente; el DBMS realiza la agrupación y lo único que se enumera en C# es el conjunto de resultados. –
'Ninjas' es una lista en memoria, IEnumerable. – Belinda