Cómo: Realizar una subconsulta en una operación de agrupación (Guía de programación de C#)
En este tema se muestran dos formas distintas de crear una consulta que ordena los datos de origen en grupos y, a continuación, realiza una subconsulta en cada grupo individualmente. La técnica básica de cada ejemplo consiste en agrupar los elementos de origen utilizando una continuación denominada newGroup y, a continuación, generar una nueva subconsulta en newGroup. Esta subconsulta se ejecuta en cada grupo nuevo creado por la consulta externa. Tenga en cuenta que en este ejemplo determinado el resultado final no es un grupo, sino una secuencia simple de tipos anónimos.
Para obtener más información sobre cómo agrupar, vea group (Cláusula, Referencia de C#).
Para obtener más información sobre las continuaciones, vea into (Referencia de C#). En el ejemplo siguiente se utiliza una estructura de datos en memoria como origen de datos, pero se aplican los mismos principios a cualquier tipo de origen de datos LINQ.
Ejemplo
public void QueryMax()
{
var queryGroupMax =
from student in students
group student by student.Year into studentGroup
select new
{
Level = studentGroup.Key,
HighestScore =
(from student2 in studentGroup
select student2.ExamScores.Average()).Max()
};
int count = queryGroupMax.Count();
Console.WriteLine("Number of groups = {0}", count);
foreach (var item in queryGroupMax)
{
Console.WriteLine(" {0} Highest Score={1}", item.Level, item.HighestScore);
}
}
Compilar el código
Este ejemplo contiene referencias a objetos definidos en la aplicación de ejemplo del tema Cómo: Realizar una consulta en una colección de objetos (Guía de programación de C#). Para compilar y ejecutar este método, péguelo en la clase StudentClass de esa aplicación y agregue una llamada a éste desde el método Main.
Cuando adapte este método a su propia aplicación, recuerde que LINQ requiere la versión 3.5 de .NET Framework y que el proyecto debe contener una referencia a System.Core.dll y una directiva using para System.Linq. Los tipos LINQ to SQL, LINQ to XML y LINQ to DataSet requieren directivas using y referencias adicionales. Para obtener más información, vea Cómo: Crear un proyecto con LINQ.