You are on page 1of 7

Contenido

Prlogo del autor...................................................................... xv


Agradecimientos........................................................................... xvii
Introduccin.................................................................................. xix

Parte 1
Conceptos preliminares
Mtodos annimos......................................................................

1.1. Breve repaso a los delegados y eventos en C# 1.........................................


1.2. Los mtodos annimos de C# 2.0......................................................................
1.3. Paso de delegados annimos como parmetros.............................................
1.4. Acceso a las variables de mbitos externos....................................................

3
7
8
9

Genricos........................................................................................... 13
2.1. Cada oveja con su pareja.......................................................................................
2.2. La expresin default(T)...........................................................................................
2.3. La implementacin de la genericidad en .NET................................................
2.4. Colecciones genricas..............................................................................................
2.5. Ms de un parmetro de tipo...............................................................................
2.6. Restricciones...............................................................................................................
2.7. Mtodos genricos....................................................................................................
2.8. Delegados genricos.................................................................................................
2.9. Interfaces genricas..................................................................................................
2.10. La interfaz IEnumerable<T>..................................................................................
2.11. La semntica de foreach para IEnumerable<T>..............................................
2.12. Ejemplo de implementacin de IEnumerable<T>...........................................
2.13. La interfaz ICollection<T>.....................................................................................

13
21
21
22
24
26
27
29
32
32
34
35
37

Iteradores......................................................................................... 39
3.1. Bloques de iteracin................................................................................................ 39
3.2. La secuencia del 1 al 1000, revisited.................................................................... 40
ix

 Contenido

3.3. Detalles internos.......................................................................................................


3.4. La generacin bajo demanda durante la iteracin.........................................
3.5. Dont go breaking my iteration.................................................................................
3.6. Mejorando la iteracin............................................................................................
3.7. Primos y enteros grandes.......................................................................................
3.8. Un ejemplo ms prctico.......................................................................................

40
41
42
43
44
46

Tipos valor anulables.............................................................. 49


4.1. Fundamentos............................................................................................................... 49
4.2. Implementacin de los tipos valor anulables................................................... 51
4.3. Un detalle a tener en cuenta................................................................................ 53

Parte 2
Novedades en C# 3.0
Novedades bsicas en C# 3.0............................................... 57
5.1. Declaracin implcita del tipo de variables locales........................................
5.1.1. Sobre la conveniencia de utilizar var..................................................
5.2. Propiedades implementadas automticamente.................................................
5.3. Inicializadores de objetos y colecciones............................................................
5.3.1. Inicializadores de objetos........................................................................
5.3.2. Inicializadores de colecciones................................................................
5.4. Tipos annimos inmutables....................................................................................
5.5. Arrays de tipo definido implcitamente..............................................................
5.6. Mtodos parciales.....................................................................................................
5.6.1. Utilidad de los mtodos parciales........................................................

57
59
59
60
60
62
63
65
65
68

Mtodos extensores................................................................... 69
6.1. Introduccin................................................................................................................ 69
6.2. La sintaxis.................................................................................................................... 71
6.3. Ms ejemplos.............................................................................................................. 72
6.4. El acceso a los mtodos extensores................................................................... 75
6.5. Recomendaciones de utilizacin........................................................................... 76
6.6. La razn de ser de los mtodos extensores................................................... 77

Expresiones lambda..................................................................... 79
7.1. Introduccin................................................................................................................
7.2. Las expresiones lambda como objetos de cdigo..........................................
7.3. La sintaxis....................................................................................................................
7.4. El tipo delegado Func..............................................................................................
7.5. Ms ejemplos..............................................................................................................

79
80
81
82
82

Contenido xi

7.6. Uno ms complejo....................................................................................................


7.7. Parmetros por referencia.....................................................................................
7.8. Recursividad en expresiones lambda..................................................................
7.9. Las expresiones lambda como objetos de datos............................................

83
84
85
86

rboles de expresiones............................................................. 87
8.1. De expresiones lambda a rboles de expresiones.........................................
8.1.1. Los rboles como representacin de expresiones.........................
8.2. La jerarqua de clases de expresiones................................................................
8.3. Ms ejemplos..............................................................................................................
8.4. Manipulacin programtica de rboles...............................................................
8.5. Clculo de derivadas................................................................................................
8.6. Y ahora, los deberes................................................................................................

87
88
91
96
98
107
112

Parte 3
Consultas integradas en C#
Fundamentos de LINQ................................................................. 115
9.1. Presentacin de linq.............................................................................................
9.2. Las expresiones de consulta..................................................................................
9.3. Reescritura de las expresiones de consulta.....................................................
9.4. La (no) semntica de los operadores de consulta.........................................
9.5. Resolucin de llamadas a operadores................................................................
9.6. Los operadores de consulta estndar................................................................
9.7. El patrn de expresiones de consulta................................................................
9.8. La utilidad objectdumper......................................................................................
9.9. Ejemplos bsicos........................................................................................................
9.10. De nuevo la ejecucin diferida.............................................................................
9.11. Sintaxis de las expresiones de consulta.............................................................
9.12. Productos cartesianos..............................................................................................
9.12.1. Restriccin de productos y optimizacin de consultas.................
9.13. Encuentros...................................................................................................................
9.13.1. Particularidades sintcticas.....................................................................
9.13.2. Diferencia con el producto cartesiano restringido.........................
9.14. Grupos..........................................................................................................................
9.15. La clusula into..........................................................................................................
9.15.1. Continuaciones...........................................................................................
9.15.2. Encuentros agrupados..............................................................................
9.15.3. Emulando encuentros externos con encuentros agrupados........
9.16. La clusula let.............................................................................................................
9.17. Algunos ejemplos prcticos...................................................................................
9.18. Un nuevo modelo de escritura de bucles?......................................................

115
117
119
121
121
123
124
125
126
128
130
131
133
133
134
135
135
137
137
139
140
142
143
145

xii Contenido

Operadores de consulta estndar.................................. 149


10.1. Tabla de operadores de consulta estndar.......................................................
10.2. Operadores bsicos..................................................................................................
10.2.1. El operador Where()...............................................................................
10.2.2. El operador Select().................................................................................
10.2.3. Caso trivial de Select()............................................................................
10.2.4. El operador SelectMany().......................................................................
10.2.5. Operadores de ordenacin....................................................................
10.2.6. El operador GroupBy()............................................................................
10.2.7. El operador Join()......................................................................................
10.2.8. El operador GroupJoin().........................................................................
10.3. Operadores de particin........................................................................................
10.3.1. El operador Take()....................................................................................
10.3.2. El operador Skip().....................................................................................
10.3.3. El operador TakeWhile().........................................................................
10.3.4. El operador SkipWhile()..........................................................................
10.4. Operadores conjuntuales........................................................................................
10.4.1. El operador Distinct()..............................................................................
10.4.2. El operador Union().................................................................................
10.4.3. El operador Intersect()............................................................................
10.4.4. El operador Except()................................................................................
10.5. Operadores de conversin....................................................................................
10.5.1. El operador ToArray().............................................................................
10.5.2. El operador ToList().................................................................................
10.5.3. El operador ToDictionary()....................................................................
10.5.4. El operador ToLookup()..........................................................................
10.5.5. El operador AsEnumerable().................................................................
10.5.6. El operador Cast<T>()............................................................................
10.5.7. El operador OfType<T>()......................................................................
10.6. Operadores de generacin de secuencias........................................................
10.6.1. El operador Range().................................................................................
10.6.2. El operador Repeat<T>().......................................................................
10.6.3. El operador Empty<T>().........................................................................
10.7. Otros operadores de transformacin de secuencias....................................
10.7.1. El operador Concat()...............................................................................
10.7.2. El operador Reverse()..............................................................................
10.8. Cuantificadores..........................................................................................................
10.8.1. El operador Any().....................................................................................
10.8.2. El operador All()........................................................................................
10.8.3. El operador Contains()............................................................................
10.8.4. El operador SequenceEqual().................................................................
10.9. Operadores de elementos.....................................................................................
10.9.1. El operador First()....................................................................................
10.9.2. El operador FirstOrDefault().................................................................
10.9.3. El operador Last().....................................................................................

149
153
153
154
155
156
158
160
162
164
166
167
167
168
168
169
169
170
171
171
172
172
172
173
174
175
176
177
177
178
178
178
179
179
179
180
180
180
181
181
182
182
182
183

Contenido xiii

10.9.4. El operador LastOrDefault().................................................................


10.9.5. El operador Single()..................................................................................
10.9.6. El operador SingleOrDefault()..............................................................
10.9.7. El operador ElementAt().........................................................................
10.9.8. El operador ElementAtOrDefault().....................................................
10.9.9. El operador DefaultIfEmpty()................................................................
10.10. Agregados....................................................................................................................
10.10.1. Los operadores Count() y LongCount()............................................
10.10.2. Los operadores Max() y Min()..............................................................
10.10.3. El operador Sum().....................................................................................
10.10.4. El operador Average().............................................................................
10.10.5. El operador Aggregate()..........................................................................

183
184
184
185
185
186
186
186
187
188
189
190

El patrn LINQ................................................................................. 193


11.1. Acercando LINQ a nuevos tipos de datos....................................................... 193
11.1.1. LINQ to Pipes............................................................................................ 195
11.2. El patrn de expresiones de consulta................................................................ 198
11.3. Una implementacin alternativa a LINQ to Objects.................................... 207
11.4. La interfaz IQueryable<T>.................................................................................... 212
11.4.1. Definiciones................................................................................................. 213
11.4.2. Ejemplo bsico............................................................................................ 214
11.4.3. Implementacin de IQueryable<T>..................................................... 217
11.5. Qu hace el proveedor de consultas................................................................. 218
11.5.1. El mtodo CreateQuery()...................................................................... 219
11.5.2. El mtodo Execute()................................................................................. 221
11.6. Un ejemplo real: LINQ to TFS............................................................................. 222
11.6.1. Presentacin de las API de TFS............................................................ 222
11.6.2. Ejemplo bsico de consulta.................................................................... 224
11.6.3. Un proveedor bsico................................................................................ 224
11.6.4. La puerta de entrada a LINQ............................................................... 225
11.6.5. La implementacin de IQueryable<WorkItem>.............................. 226
11.6.6. El proveedor de consultas...................................................................... 228
11.6.7. El mecanismo de enumeracin.............................................................. 229

Parte 4
Extensiones de LINQ
LINQ to XML....................................................................................... 235
12.1. Presentacin................................................................................................................
12.2. Expresiones de consulta sobre documentos XML.........................................
12.3. Operadores de consulta especficos de LINQ to XML...............................
12.4. Bsquedas en documentos XML..........................................................................
12.4.1. Bsquedas XPath.......................................................................................

235
241
244
245
246

xiv Contenido

12.5. Insercin, modificacin y borrado de nodos...................................................


12.6. Transformacin de documentos...........................................................................
12.6.1. Transformaciones XSLT...........................................................................
12.7. Conclusin...................................................................................................................

246
247
249
249

LINQ to DataSet.............................................................................. 251


13.1. Presentacin................................................................................................................
13.2. Consultas contra DataSet tipados.......................................................................
13.3. Consultas contra DataSet no tipados................................................................
13.4. De vuelta a un DataTable.......................................................................................
13.5. Actualizaciones...........................................................................................................
13.6. El mtodo AsDataView()........................................................................................
13.7. Conclusin...................................................................................................................

251
253
254
256
256
257
258

LINQ to SQL........................................................................................ 259


14.1. Presentacin................................................................................................................
14.2. Contextos de datos y clases de entidad...........................................................
14.2.1. El cdigo generado por el diseador..................................................
14.3. Ejecucin de consultas integradas........................................................................
14.4. El mapeado objeto/relacional.................................................................................
14.4.1. Gestin de la identidad...........................................................................
14.5. Propiedades de navegacin.....................................................................................
14.5.1. Gestin de la carga de las propiedades
de navegacin..............................................................................................
14.6. Consultas dinmicas.................................................................................................
14.6.1. El mtodo ExecuteQuery<T>()............................................................
14.6.2. La clase DynamicQueryable...................................................................
14.7. Actualizacin de datos.............................................................................................
14.7.1. Utilizacin de transacciones...................................................................
14.7.2. Gestin de la concurrencia....................................................................
14.7.3. Personalizacin de las actualizaciones.................................................
14.8. Ejecucin de procedimientos y funciones.........................................................
14.9. Combinando tecnologas.........................................................................................
14.10. La clase LinqDataSource.........................................................................................
14.11. Conclusin...................................................................................................................

259
261
263
266
274
274
275
276
276
277
278
279
281
282
284
285
286
286
288

ndice analtico............................................................................. 289