Dentro del mundo de LinQ,
las proyecciones, determinan el tipo de datos que será devuelto o proyectado
cuando sea aplicado a uno de nuestras secuencias IEnumerable<T>.
sábado, 17 de enero de 2015
Proyecciones en LinQ, La cláusula Select y SelectMany
martes, 16 de diciembre de 2014
Claúsula Where
La cláusula where,
representa el elemento de filtrado dentro del mundo de LinQ, al igual que en el lenguaje SQL. Esta es una de las más usadas y de las más útiles de todas
las que componen su librería de métodos
extensores (System.Linq).
La parte más importante dentro de la cláusula Where, es el llamado ‘Predicate’, este es un Parámetro de
tipo Func<TSource, bool>
que viene a indicar la condición del filtrado. Os facilito la entrada
del blog donde se explican en detalle los delegados
anónimos Func y donde podéis ampliar información sobre estos tipos.
miércoles, 10 de diciembre de 2014
Operadores de Consulta
Dentro del universo de LinQ, tenemos dos formas diferentes
de realizar las llamadas y hacer uso de nuestros métodos de extensores de IEnumerable<T>, la primera es
haciendo uso de las Expresiones Lambda, que vendría a representar un uso
cotidiano de cualquier método extensor, y la segunda es utilizando el llamado azúcar sintáctico (formato de
consulta) y que nos permite realizar una consulta de manera muy similar a como
realizaríamos una llamada en el lenguaje SQL.
Es importante señalar que hay algunas opciones que no están
disponibles dentro del formato de consulta, aunque son las mínimas, y que
iremos viendo según vayamos estudiando los operadores (métodos extensores).
lunes, 18 de agosto de 2014
Ejecución Diferida (Lazy Loading)
La ejecución perezosa o diferida (Lazy Loading) es el
comportamiento por defecto que usa LinQ para ejecutar, valga la redundancia,
sus métodos extensores. A grandes rasgos viene a significar que los métodos no
se ejecutan en el momento de realizar su llamada, sino que se ejecutan en el
momento en que consumimos (utilizamos) alguno de los datos devueltos por esta
llamada. Con todo esto el motor de LinQ se asegura el no realizar cálculos,
cargas de datos, etc., que el usuario no necesite en ese momento.
domingo, 17 de agosto de 2014
IEnumerable, Entendiendo las secuencias ...
La Iterface IEnumerable<T>, es una de las partes más importantes de todo el mundo de LinQ, ya que todos sus métodos extensores están realizados sobre este tipo y prácticamente todos ellos devuelven objetos de este mismo tipo.
martes, 8 de julio de 2014
Métodos de Extensión - Extensions Methods
Los métodos de extensión, nos ofrecen la posibilidad de
poder extender las clases de terceros, de poder añadir métodos a clases de las
que no disponemos del código fuente y nos es de utilidad añadirles nuevas
funcionalidades.
Esta característica se añadió en la versión 3.0 del .Net
Framework, y es masivamente utilizada dentro de las librerías de LinQ, especialmente para el tipo IEnumerable<T>, que veremos
con posterioridad en la siguiente entrada.
martes, 24 de junio de 2014
Expresiones Lambda
Vamos con la evolución de los métodos anónimos, para muchos
las muy polémicas y comprometidas Expresiones Lambda.
Aparecieron en la versión 3.0 del Framework y vinieron a ser el apoyo ideal para nuestro bien
amado LinQ. Las Expresiones
Lambda tienen la capacidad de manejar eventos ‘inline’ asignando bloques de código a delegados o eventos,
al igual que lo hacían nuestros métodos
anónimos, pero de una forma más reducida y concisa, ‘echando mano’
de la inferencia de tipos.
Intentaremos desmitificarlas haciendo una comparativa con
los métodos anónimos y
desglosando cada una de sus partes y sus formas de uso.
martes, 29 de abril de 2014
Métodos, Delegados Anónimos
Lo primero para ver este apartado es explicar que podemos
encontrárnoslo como Métodos
Anónimos o Delegados
Anónimos, aunque también podemos referirnos a ellos como Funciones Anónimas, o Funciones o Métodos ‘Inline’.
Aparecieron en la versión 2.0 del Framework y vinieron a cubrir la incapacidad
de poder definir un método dentro de cualquier porción de código, sin tener que
echar mano de la forma clásica [public/private
void/int/string/ … nombreMétodo (parámetros)].
Esto como veremos en la siguiente entrega fue superado por
creces con la introducción de la Expressiones
Lambda en la versión del Framework 3.0 y con el concepto de Inferencia de Tipos, pero como
veremos en esta hay una excepción que poseen los delegados anónimos que no
pueden realizar las Expressiones Lambda.
martes, 22 de abril de 2014
Eventos - events
Los eventos son un tipo definido dentro del CLR que nos permite notificar a
otros objetos algo que está sucediendo en el interior de nuestra clase. Para
que estos objetos puedan ser informados, antes tienen que suscribirse al
evento.
Desde la aparición de Visual
Basic 6, normalmente achacamos los eventos a controles tales como Buttons, Combobox, DataGrids,
etc., pero su aplicación y su enfoque va mucho más allá, y su uso en clases que
no forman parte de la GUI,
es tan normal, tan común y tan útil como en éstas.
El concepto de evento está completamente ligado al de delegado, ya que se nutre de estos
para guardar las acciones que se suscriben al mismo, y así añadir su
restricción de firma para estas acciones, de manera que solo se puedan
suscribir a estos eventos los métodos
que cumplan con la firma de su delegado.
martes, 15 de abril de 2014
Microsoft Active Profesional (MAP) 2014
En el momento de escribir esta entrada, no dejo todavía de sorprenderme de haber recibido este galardón por parte de Microsoft.
Cuando empecé este proyecto hace unos meses atrás, mi objetivo era intentar paliar la falta de información directa, concisa y sobre todo amplia de muchos de los temas que yo consideraba interesantes para la comunidad de .Net. Quería intentar acabar con esos ejemplos para mi gusto cortos que no mostraban toda la potencia y la versatilidad de los mismos, en principio en la lengua de Cervantes, para actualizarlos después en la de Shakespeare cuando tuviera un mejor manejo de este.
Delegados - Delegates - parte 3
La covarianza
y la contravarianza son uno
de esos conceptos dentro de la programación que a priori, no solemos verles una
funcionalidad o un uso demasiado práctico, pero que cuando manejas, te das
cuenta que vienen a romper una serie de limitaciones que sin su existencia nos
haría tener que decir eso de ‘no se puede hacer’ en más ocasiones al día.
Esto
no es menos importante para LinQ ya que tienen una aparición estelar con los delegados genéricos Func.
Para finalizar también veremos la posibilidad de realizar ejecuciones asíncronas con nuestros delegados.
Para finalizar también veremos la posibilidad de realizar ejecuciones asíncronas con nuestros delegados.
jueves, 23 de enero de 2014
Delegados - Delegates - parte 2
Continuamos con la segunda parte de nuestros queridos delegados, esa clase tan útil, y utilizada por el framwork y tantas veces se nos hace tan complicada de entender.
En esta segunda parte nos centraremos principalmente en
estudiar la clase base y los
métodos y propiedades más importantes de ésta, que hacen que el delegado realice una series de
funciones muy marcadas y en ocasiones totalmente transparentes para nuestro
trabajo diario con ellos, ya que están ocultas dentro de la redefinición de operadores.
La segunda parte del post irá dirigida al uso de Generics con delegados. En ella profundizaremos en la importancia y la potencia
que tienen para la ejecución de referencias a funciones y a métodos
genéricos. También daremos un repaso a los delegados genéricos más importantes del Framework y de LinQ
en general que no son otros que Func<T>
y Action<T>.