Hemos recibido grandes comentarios sobre nuestro informe de localización que hemos creado en Agrupación y agregación de datos con LINQ con esta consulta:
123desde e en el grupo de empleados e por e.GroupCode.ToUpper().Substring(0,2)into gselectnew{ Ubicación, Total };
csharp
Un usuario observó que cuando tuvimos esta pantalla:
AA 85
AB 73
..
ZZ 145
- sería útil poder hacer clic en la ubicación y ver una lista de quiénes son los empleados. Sus interesados estuvieron de acuerdo, así que esto se dividió en una historia para que usted trabaje en ella. La historia se lee así:
Como usuario, necesito ver una lista de los usuarios de un lugar en particular, para poder hacer planes de personal.
Como con cualquier consulta, comenzamos definiendo lo que queremos que sea la forma del valor de retorno. Por ahora, diremos que queremos un conjunto de objetos completos de Employee:
12desde e en el empleo, seleccione e
csharp
La ubicación de la consulta será suministrada por el código. Para nuestra consulta de muestra, usaremos AA . Si recuerdas, Location no existe como un campo directo en el objeto Employee, sino más bien como los dos primeros caracteres de la propiedad GroupCode, por ejemplo, AA123 . Esto significa que tendremos que realizar una simple manipulación de la cadena con la función de subcadena, tal como hicimos en Seleccionar y transformar datos con LINQ.
Nuestro conjunto de datos original se ve así:
Id = 1 Nombre = «Chris» Apellido = «Behrens» Código de grupo = «AA123» Direcciones = «7814 Vandalia Avenue Apt 3b Los Angeles CA 91610»
Id = 2 Nombre = «Sam» Apellido = «Smith» Código de grupo = «AA128» Direcciones = «7814 Vandalia Avenue Apt 3b Los Angeles CA 91610»
Id = 3 Nombre = «Gill» Apellido = «Bates» Código de grupo = «ZZ867» Direcciones = «2810 Pisces Ct Albuequerque NM 87144»
Queremos devolver sólo los dos primeros resultados del conjunto de pruebas, los empleados con los códigos de grupo «AA123» y «AA128». Para hacer que esto suceda, simplemente añadimos una cláusula de DÓNDE antes del bloque de código:
123de e en empleadosdonde e.GroupCode.ToUpper().Substring(0,2)=="AA "select e;
csharp
Esto devolverá el siguiente conjunto de resultados:
Id = 1 Nombre = «Chris» Apellido = «Behrens» Código de grupo = «AA123» Direcciones = «7814 Vandalia Avenue Apt 3b Los Angeles CA 91610»
Id = 2 Nombre = «Sam» Apellido = «Smith» Código de grupo = «AA128» Direcciones = «7814 Vandalia Avenue Apt 3b Los Angeles CA 91610»
Aquí está en la sintaxis de la consulta:
1empleados.Donde(e = ); e.CódigoGrupo.ToUpper().Substring(0,2)=="AA");
csharp
Para señalar que aquí – en primer lugar, estamos creando la cláusula where como una expresión lambda:
1e =>; e.GroupCode.ToUpper().Substring(0,2)=="AA"
csharp
En segundo lugar, ¿dónde está la declaración selecta? Estaría perfectamente bien crear una declaración de consulta como esta:
1empleados.Donde(x = ); x.CódigoGrupo.ASuperior().Subcadena(0,2)=="AA").Selecciona(e = );e);
csharp
Pero la declaración selecta no está realmente añadiendo nada. Sin ella, el motor de consulta simplemente asume que queremos devolver todos los resultados sin transformar como el tipo original.