lunes, 15 de junio de 2015

Set Operators, Concat, Union, Intersect, Except y Distinct




Seguimos con los operadores de LinQ, ahora le toca el turno a los ‘Set Operators’ u Operadores de Conjunto.

Los operadores de conjunto, nos permiten realizar actuaciones sobre dos secuencias (IEnumerable<T>) del mismo tipo de datos, dando como resultado una colección de este mismo tipo. Todas y cada una de sus ejecuciones se realizan de forma diferida o perezosa.

En caso de que alguna de estas colecciones sea null en el momento de realizar la llamada, el compilador lanzará un ArgumentNullException.

Vamos a detallar cada uno de sus operadores, para intentar que todo esto quede un poco más claro, haré un par de ejemplos para cada operador, uno con datos simples, colecciones de tipo int, y otro con una de las clases más utilizada en nuestros ejemplos y que tiene su definición en los post anteriores, el tipo Automovil. El objetivo  es comprender lo imprescindible, que es el uso de las sobrecargas que admiten un comparador de tipo IEQualityComparer<T> para los tipos compuestos, en el que indicaremos al compilador como queremos que se diferencien 2 objetos de este tipo.


Como en todas las reglas, hay una excepción y esta no iba a ser menos. El operador Distinct, cambiará, para utilizar una única colección en decremento de dos, pero eso lo contaremos un poquito más adelante.



domingo, 24 de mayo de 2015

Operadores de Elemento, First, Single, LastOrDefault ... etc.




Los operadores de elemento son todos aquellos métodos extensores dentro de la librería de LinQ, que devuelven una única pieza o el valor por defecto de su tipo a partir de una secuencia de datos IEnumerable<TSource>.


Estos operadores suelen estar compuestos por su definición simple y una variación ‘OrDefault’. Esta variación ‘OrDefault’, viene a significar, que en caso de no cumplirse el criterio de búsqueda, el operador no lanzará ninguna excepción y devolverá el valor por defecto del tipo al que pertenece la secuencia. Este valor por defecto es el que devolvería el operador default(T), que ya estudiamos con anterioridad.









domingo, 10 de mayo de 2015

Paginación con LinQ



Después del último post dedicado a los operadores de Partición, me ha parecido interesante el parar un poco con toda la ristra de descripción de operadores y entrar un poco en un ejemplo más jugoso de la vida real. En este ejemplo utilizaremos dos de los operadores descritos en el último post, Take y Skip, y veremos lo enormemente sencillo que puede llegar a ser, el realizar paginación de datos con el uso de estos operadores.


Para el ejemplo he utilizado una aplicación WPF. No entraré demasiado en su implementación y en las características de esta tecnología, para aparte de no confundir, centrarme en lo realmente significativo del post. Pero que nadie se preocupe si está interesado en la última tecnología de desarrollo de aplicaciones de escritorio de Microsoft, ya que si el tiempo y la dedicación me lo permiten, cuando acabe todo este tinglao de LinQ, la idea es empezar con WPF, ya que creo que el vacío de información en castellano es bastante grande, y no hay nada realmente didáctico.




miércoles, 6 de mayo de 2015

Partitions Operators, Take, Skip, TakeWhile y SkipWhile






El objetivo de los operadores de partición, consiste en restringir el número de elementos de una secuencia. Para ello creará 2 subsecuencias en memoria, en base a un parámetro int o un Func<T, bool>, según el tipo de operador. Una de estas dos subsecuencias, serán el resultado, y la elección, también se tendrá en cuenta según el operador utilizado. Para vislumbrar mejor estas líneas, vamos a ver cada uno de ellos con más detalle:






lunes, 20 de abril de 2015

Quantifiers Operators, All, Any y Contains







Los Quantifier Operators, son un grupo bastante especial de métodos extensores que devuelven un objeto de tipo bool.

 Este tipo de métodos son en ocasiones obviados, normalmente por su desconocimiento y sustituidos por la unión del uso del método Where() + Count().

Este suele ser un error común de uso, ya que los Quantifier Operators están optimizados para este fin, y la ganancia de rendimiento con su uso es más que evidente.

Más adelante haremos hincapié en ello con unos ejemplos que expongan este manifiesto.