Archivo de la etiqueta: Linq

Lo que estoy maquinando sobre expresiones lambda (métodos anónimos), programación asíncrona (tareas en otros hilos), cancelación de tareas, Parallel.For, consultas LINQ, DataGridView virtual y más, tanto para C# como para Visual Basic

Pues eso… ¡peasso de título! y seguramente se me olvidará algo, por eso he puesto al final «y más». Pero la idea que tengo en mente hoy 24 de febrero de 2022 (con la guerra de Ucrania fresquita, aunque es algo que, lamentablemente no es tan fresca y que ya viene de largo), es explicarte en una serie de posts o entradas en el blog todo lo indicado en el título.

Sobre las expresiones lambda o métodos anónimos, he pensado en ponerte un par de videos que Héctor de León publicó a principios del año pasado en su canal de YouTube (HDELEON.NET), pero como el código que él utiliza es para C# .NET, te mostraré también el equivalente para VB.NET así, si eres de los que utilizan C# lo puedas entender mejor. Todo esto contando con que él me autorice mostrar su código de C# y el equivalente (en la medida de lo posible) de Visual Basic para punto NET.
Actualización de las 17:33: Autorización que ya me ha dado 😉 ¡Gracias Héctor!

En cuanto a la programación asíncrona, te explicaré cómo crear tareas en otros hilos (principalmente con Task.Run) y el uso de async y await. Esas tareas se lanzarán o se procesarán también en el hilo principal de una aplicación de tipo Windows Forms (todo el código creado para .NET Core versiones 5 y/o 6) de forma que sepas qué cosas debes saber para el uso de controles, etc. entre hilos, cosa que solucionaré con InvokeRequired y la llamada a un delegado mediante Invoke. Por supuesto verás cómo definir delegados y cómo usarlos en el código.
Con todo esto verás cómo acceder a parte del código que se ejecuta en el hilo principal (el creado para mostrar el formulario de inicio) desde otro hilo (o tarea).

También verás cómo cancelar esas tareas y cómo controlarlas, todo ellos mediante el uso de objetos CancellationTokenSource y CancellationToken (tanto en su forma normal y anulable). Y lo que debes hacer para comprobar en el código cuando se ha cancelado y cómo tratar esa cancelación, algo que harás pasándole a la tarea (Task) el objeto de tipo CancellationToken.

Y como algunas de las tareas (ya sean asíncronas o no) puede que tenga que acceder a objetos de una colección, verás algunos casos de cómo usar Parallel.For para repartir en tareas el proceso de comprobación del contenido de esa colección.

La mayoría de las cosas que se hará en el código de ejemplo requerirá de las expresiones lambda (o métodos anónimos) y su uso en expresiones de LINQ. Ya sabes: Where, Any, Select, etc.

Por último, parte del código de ejemplo lo haré usando un control DataGridView y en ese caso te mostraré cómo crearlo para usar una caché con los datos que manejará y todo ello usando el modo virtual de ese control, de esa forma, al menos en mi caso, he logrado agilizar (sobre todo acelerar) mostrar los datos en ese grid (o cuadrícula). La caché usada estará preparada para el tipo de datos que voy a usar en ese ejemplo.

Todo esto, lo iré publicando poco a poco, entre otras cosas, porque lo estoy usando en una aplicación que utiliza datos o tipos muy concretos. Si te sirve de algo, es una aplicación que estoy migrando de MS-DOS a Windows, y la mayoría de los datos los obtiene de ficheros de texto… ¡Sí, así de vieja es! 🙂
Pero haré que el código acceda a colecciones de datos más simples, que en principio no se obtendrá de una base de datos, pero no descarto que también haga alguna modificación para acceder a una base de datos, y si es remota, mejor. Pero eso ya lo veré en su momento.

Bueno, te dejo por ahora y ya iré poniendo cosas… seguramente pondré los enlaces en este mismo post, pero si se me olvida hacerlo… pues… ¡busca en fechas posteriores al 24 de febrero de 2022! 😉

Y ya sabes… si me quieres invitar a un cafelillo o refresco virtual, puedes usar el enlace de DONAR con PayPal. Gracias de antemano.

Nos vemos.
Guillermo

Buscar un elemento y si no está, usar el anterior

Pues eso… otro articulillo/truco que acabo de publicar en mi sitio sobre cómo buscar "algo" y si no se encuentra, quedarse con el anterior, usando instrucciones de LINQ.

 

Aquí tienes el enlace y la descripción…

 

Buscar un elemento y si no está, usar el anterior

 

Buscar un elemento y si no está, usar el anterior… En este ejemplo he usado LINQ para realizar la búsqueda con Where y accediendo al elemento por medio del método extensor Last.

 

Espero que te sea de utilidad.

 

Nos vemos.
Guillermo

Buscar datos con LINQ sin tener en cuenta mayúsculas/minúsculas

Pues eso… un articulillo que acabo de publicar en mi sitio sobre cómo hacer una búsqueda insensible a mayúsculas y/o minúsculas (case insensitive, pero usando instrucciones de LINQ.

 

Aquí tienes el enlace y la descripción…

 

Buscar datos con LINQ sin tener en cuenta mayúsculas/minúsculas

 

Buscar datos con LINQ sin tener en cuenta mayúsculas/minúsculas. O lo que es lo mismo buscar datos case insensitive usando instrucciones de LINQ (ya sea para objetos en memoria como los contenidos en los procedentes de una base de datos).

 

Espero que te sea de utilidad.

 

Nos vemos.
Guillermo