PDF de programación - Operadores de LINQ

Imágen de pdf Operadores de LINQ

Operadores de LINQgráfica de visualizaciones

Publicado el 20 de Marzo del 2018
733 visualizaciones desde el 20 de Marzo del 2018
732,2 KB
111 paginas
Creado hace 13a (12/05/2010)
Operadores de LINQ






Jesús Rodríguez Rodríguez

 

2



Operadores de LINQ


Primera Edición, Mayo de 2010
http://www.foxandxss.net

Libro publicado bajo la licencia Creative Commons











 

3 Operadores de LINQ



OPERADORES DE LINQ

1. FILTERING (FILTRADO)

1.1 OFTYPE
1.2 WHERE

2. PROJECTION (PROYECCIÓN)

2.1 SELECT

3. PARTITIONING (PARTICIONADO)

3.1 SKIP
3.2 SKIPWHILE
3.4 TAKEWHILE

4. JOIN (UNIÓN)

4.1 GROUPJOIN

5. CONCATENATION (CONCATENACIÓN)

5.1 CONCAT

6. ORDERING (ORDENACIÓN)

6.1 ORDERBY
6.2 ORDERBYDESCENDING
6.3 REVERSE
6.4 THENBY
6.5 THENBYDESCENDING

7. GROUPING (AGRUPACIÓN)















17 

17 
18 
21 

23 

23 

32 

32 

33 

33 
35 
38 
39 
42 

45 



7.1 GROUPBY
7.2 TOLOOKUP

8. SET (CONJUNTO)

8.1 DISTINCT

8. SET (CONJUNTO)

8.3 INTERSECT
8.4 UNION

9. CONVERSION (CONVERSIÓN)

9.1 ASENUMERABLE
9.2 ASQUERYABLE
9.3 CAST
9.4 TOARRAY
9.5 TODICTIONARY
9.6 TOLIST

10. EQUALITY (IGUALDAD)

10.1 SEQUENCEEQUAL

11. ELEMENT (ELEMENTO)

11.1 ELEMENTAT
11.2 ELEMENTATORDEFAULT
11.3 FIRST
11.4 FIRSTORDEFAULT
11.5 LAST
11.6 LASTORDEFAULT
11.7 SINGLE
11.8 SINGLEORDEFAULT




Operadores de LINQ

4

45 
55 

60 

60 

62 

64 
67 

70 

70 
71 
72 
73 
74 
78 

80 

80 

82 

82 
82 
83 
84 
85 
87 
88 
89 

91 

91 
92 
93 
94 

95 

95 
96 
97 

100 

100 
102 
104 
105 
106 
108 
109 

5 Operadores de LINQ



12. GENERATION (GENERACIÓN)

12.1 DEFAULTIFEMPTY
12.2 EMPTY
12.3 RANGE
12.4 REPEAT

13. QUANTIFIER (CUANTIFICADORES)

13.1 ALL
13.2 ANY
13.3 CONTAINS

14. AGGREGATION (AGREGACIÓN)

14.1 AGGREGATE
14.2 AVERAGE
14.3 COUNT
14.4 LONGCOUNT
14.5 MAX
14.6 MIN
14.7 SUM







1. Filtering (Filtrado)

6


1. Filtering (Filtrado)


1.1 OfType

El operador OfType nos permite filtrar una secuencia dado un tipo.

1.1.1 Código necesario para los ejemplos

Lista de objetos al azar:

object[] objetos = { "LINQ", 1, 23.4F, "Perro",


new object(), "Casa" };



















1.1.2 OfType

public static IEnumerable<TResult> OfType<TResult>(
this IEnumerable source
)



Le especificamos el tipo que queremos filtrar y nos devuelve una
enumeración de dicho tipo.

Por ejemplo, si queremos solo los elementos del tipo string usamos el
operador OfType para filtrar esa secuencia:

IEnumerable<string> cadenas = objetos.OfType<string>();



Si imprimimos el resultado, la salida sería:

LINQ

Perro
Casa




7 Operadores de LINQ



1.2 Where

El operador Where nos permite filtrar una secuencia, pero a diferencia
de OfType, el operador Where es mucho más flexible puesto que admite
como parámetro un delegado.

1.2.1 Código necesario para los ejemplos

Lista de títulos (imaginarios) de libros:

var libros = new List<string>








"Programando en C#",
"LINQ para torpes",
"WPF para todos",
"Empezando con LINQ",
"LINQ Avanzado"









{





};



1.2.2 Where estándar

public static IEnumerable<TSource> Where<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate
)



En este caso Where acepta un delegado el cual recibe como parámetro
un elemento de la secuencia y nos devuelve un bool que nos indica si ese
elemento se filtra o no. El operador devuelve una enumeración con los
elementos filtrados.

Queremos una nueva lista de libros donde sólo estén los que sean de
LINQ, para ello usamos Where.

IEnumerable<string> librosLINQ = libros.Where(

libro => libro.Contains("LINQ"));



Además, el operador Where se puede convertir a la sintaxis de un query
expression:

IEnumerable<string> librosLINQ = from libro in libros

where libro.Contains("LINQ")
select libro;












En ambos casos, el resultado de imprimirlo sería:

1. Filtering (Filtrado)

8

LINQ para torpes

Empezando con LINQ

LINQ Avanzado



1.2.3 Where + índice

public static IEnumerable<TSource> Where<TSource>(
this IEnumerable<TSource> source,
Func<TSource, int, bool> predicate
)



En este caso, el delegado acepta también un int el cual representa la
posición de cada elemento en la secuencia que estamos filtrando.

Así que si por ejemplo queremos aquellos libros de LINQ que estén
dentro de las 3 primeras posiciones de la secuencia, podemos usar el
siguiente fragmento:

IEnumerable<string> librosLINQ = libros.Where((libro, index) =>

libro.Contains("LINQ") && index < 3);



Esto imprimiría:

LINQ para Torpes



La versión de Where que acepta también el índice, no puede ser
convertida a la sintaxis de los query expressions.










9 Operadores de LINQ


2. Projection (Proyección)


2.1 Select

El operador Select nos permite proyectar cada elemento de una
secuencia a una nueva enumeración.

2.1.1 Código necesario para los ejemplos

Una pequeña clase representando una persona con una lista de gadgets:

public class Persona
{
public string Nombre { get; set; }
public int Edad { get; set; }
public List<string> Gadgets { get; set; }

public Persona(string nombre, int edad, List<string> gadgets)
{
Nombre = nombre;
Edad = edad;
Gadgets = gadgets;
}
}


Y una lista de dichas personas:

List<Persona> personas =
new List<Persona>
{
new Persona("Jesus",
24,
new List<string> {"Ipod", "HTC Diamond"}
),
new Persona("Juan",
20,
new List<string> {"Vaio", "Android"}
),
new Persona("Alvaro",
24,
new List<string> {"Pentium",

"Movil Ladrillo"}

)
};











2.1.2 Select estándar

2. Projection (Proyección)

10

public static IEnumerable<TResult> SelectMany<TSource, TResult>(
this IEnumerable<TSource> source,
Func<TSource, IEnumerable<TResult>> selector
)


El argumento es un delegado que acepta un elemento de la secuencia y
devuelve el elemento que queramos proyectar. El operador devuelve una
enumeración de aquellos elementos que hemos proyectado.

Queremos una lista solo con los nombres de las personas, para ello
hemos de proyectar los nombres de cada persona en una nueva
enumeración:

IEnumerable<string> nombres = personas.Select(

persona => persona.Nombre);



Podemos convertir el operador Select a la sintaxis de un query
expression:

IEnumerable<string> nombres = from persona in personas
select persona.Nombre;


En ambos casos el resultado de imprimir la secuencia sería:

Juan

Alvaro



Además podemos crear tipos anónimos proyectando solo las partes que
queramos de una clase, por ejemplo, si solo queremos el nombre y la
edad:

var nombreYEdad = from persona in personas
select new { persona.Nombre, persona.Edad };


Esto crearía un tipo anónimo y dentro sería algo así:

Nombre=Jesus Edad=24

Nombre=Juan Edad=20
Nombre=Alvaro Edad=25









11 Operadores de LINQ



Por otro lado, si quisiéramos imprimir la lista de gadgets, haríamos algo
así:

<List<string>> ListasGadgets = from persona in personas
select persona.Gadgets;


Esa proyección devuelve una enumeración de listas, así que tendríamos
que hacer dos iteraciones para mostrar los gadgets:

foreach (var lista in ListasGadgets)
foreach (var gadget in lista)
Console.WriteLine(gadget);


La salida como cabe de esperar es:

Ipod

HTC Diamond

Vaio

Android

Pentium
Movil Ladrillo





Podemos ver una versión mejorada de este último ejemplo usando
SelectMany.

2.1.3 Select + Índice

public static IEnumerable<TResult> Select<TSource, TResult>(
this IEnumerable<TSource> source,
Func<TSource, int, TResult> selector
)


El delegado recibe el elemento en cuestión, además del índice de la
posición del elemento en la secuencia.

Vamos a suponer que queremos crear un tipo anónimo con cada índice y
nombre:

var nombres = personas.Select((persona, indice) =>
new { persona.Nombre, indice });









2. Projection (Proyección)

12



El resultado es:

Nombre=Jesus indice=0

Nombre=Juan indice=1

Nombre=Alvaro indice=2



Esta sobrecarga del operador Select no admite su forma en query
expression.


2.2 SelectMany

El operador SelectMany es similar al operador Select a excepción de
que SelectMany coge cada elemento que proyecta, lo convierte en una
enumeración, y luego concatena todas las enumeraciones.

2.2.1 Código necesario para los ejemplos

Una clase representando una persona y una lista de gadgets:

public class Persona
{
public string Nombre { get; set; }
public int Edad { get; set; }
public List<string> Gadgets { get; set; }

public Persona(string nombre, int edad, List<string> gadgets)
{
Nombre = nombre;
Edad = edad;
Gadgets = gadgets;
}
}


Y una lista de dichas personas:

List<Persona> personas =
new List<Persona>
{
new Persona("Jesus",
24,
new List<string> {"Ipod", "HTC Diamond"}
),
new Persona("Juan",
20,
new List<string> {"Vaio", "Android"}
),




13 Operadores de LINQ



new Persona("Alvaro",
24,
  • Links de descarga
http://lwp-l.com/pdf9736

Comentarios de: Operadores de LINQ (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad