Saltar al contenido

Pedir datos con LINQ

En nuestro subinforme donde enumeramos los empleados duplicados para una ubicación, queremos clasificar la lista por el apellido del empleado. Para que nuestra consulta sea significativa, añadiremos un nuevo empleado a nuestro conjunto de pruebas:

1234newEmployee{ Id =1, Nombre ="Chris", Apellido ="Behrens", Código de Grupo ="AA123", Direcciones =newList<string..; {"7814 Vandalia Avenue Apt 3b Los Angeles CA 91610"}, Salario =100m },newEmployee{ Id =2, Nombre ="Sam", Apellido ="Smith", Código de Grupo ="AA128", Direcciones =newList<string..; {"7814 Vandalia Avenue Apt 3b Los Angeles CA 91610"}, Salario =150m },newEmployee{ Id =3, Nombre ="Gill", Apellido ="Bates", Código de Grupo ="ZZ867", Direcciones =newList<string..; {"2810 Pisces Ct Albuequerque, NM 87144"}, Salario =100m }, newEmployee{ Id =4, Nombre ="Jane", Apellido ="Anderson", Código de Grupo ="AA125", Direcciones =newList<string.; {"2810 Pisces Ct Albuequerque, NM 87144"}, Salario =100m }

csharp

Pedir datos con LINQ
Pedir datos con LINQ

Si ejecutamos nuestra consulta actual contra el conjunto de pruebas:

123de e en empleadosdonde e.GroupCode.ToUpper().Substring(0,2)=="AA "select e;

csharp

  • recibimos los siguientes resultados:

1 Chris Behrens

2 Sam Smith

4 Jane Anderson

Los dos primeros registros están ordenados por apellido, por accidente. Pero el último registro, con el apellido «Anderson», debería aparecer primero en la lista. Para que esto suceda, añadiremos una cláusula de orden por a nuestra consulta:

1234de e en empleadosdonde e.GroupCode.ToUpper().Substring(0,2)=="AA "orderby e.LastNameselect e;

csharp

Después de ejecutar nuestra consulta contra nuestro conjunto de datos de prueba, obtenemos los siguientes resultados:

4 Jane Anderson

1 Chris Behrens

2 Sam Smith

Justo como queremos. Al hablar con nuestro jefe, mencionamos que la consulta está completa y su jefe dice: «Hmmm… ¿qué pasa con las personas casadas con el apellido? ¿Qué pasa con eso?» Lo piensas por un minuto y respondes, «Supongo que se ordenarán por apellido y luego no estoy seguro. Me aseguraré de que se ordenen por el nombre de pila también.»

Añadiremos otro usuario de prueba a nuestro conjunto para probar esto:

12345newEmployee{ Id =1, Nombre ="Chris", Apellido ="Behrens", Código de Grupo ="AA123", Direcciones =newList<string..; {"7814 Vandalia Avenue Apt 3b Los Angeles CA 91610"}, Salario =100m },newEmployee{ Id =2, Nombre ="Sam", Apellido ="Smith", Código de Grupo ="AA128", Direcciones =newList< string{{{[7814 Vandalia Avenue Apt 3b Los Angeles CA 91610"}, Salario =150m },newEmployee{ Id =3, Nombre ="Gill", Apellido ="Bates", Código de Grupo ="ZZ867", Direcciones =newList< string{{[2810 Pisces Ct Albuequerque, NM 87144"}, Salario =100m },newEmployee{ Id =4, Nombre ="Jane", Apellido ="Anderson", Código de Grupo ="AA124", Direcciones =newList<string..; {"2810 Pisces Ct Albuequerque, NM 87144"}, Salario =100m },newEmployee{ Id =5, Nombre ="Allison", Apellido ="Behrens", Código de Grupo ="AA124", Direcciones =newList<string.; {"2810 Pisces Ct Albuequerque, NM 87144"}, Salario =100m }

csharp

Allison Behrens, – el mismo apellido que Chris Behrens, pero un nombre que precede a su primer nombre, Chris. Este registro está al final del conjunto, así que, aunque los resultados están ordenados por el apellido, es probable que termine después de Chris Behrens, a menos que modifiquemos la consulta para arreglar eso. Para que esto suceda, añadiremos un segundo orden por argumento:

1234var whereEmployees =de e en empleadoswhere e.GroupCode.ToUpper().Substring(0,2)=="AA "orderby e.LastName, e.FirstNameselect e;

csharp

Esto produce estos resultados:

4 Jane Anderson

4 Allison Behrens

1 Chris Behrens

2 Sam Smith

Si trabajáramos en la sintaxis de la consulta, se vería así:

1empleados.Donde(e = ); e.CódigoDeGrupo.ToUpper().Substring(0,2)=="AA").OrderBy(e = ); e.Apellido).ThenBy(e = ); e.Nombre);

csharp