Linq Condicional para reducir los IF

Portada

Las sentencias IF a la larga siempre terminan trayendo problemas de complejidad, de legibilidad de código o de mantenimiento, y por eso mismo, en este articulo veremos como reducir algunas sentencias IF utilizando Linq.

En el siguiente repositorio de GitHub encontré una simple prueba de concepto de como realizar esto.

Buscador de libros con Linq

Suele pasar que queremos armar una query con Linq y EntityFramework que busque en la base de datos aquellos campos que recibió. Por ejemplo: Un buscador de libros 📚 donde podes filtrar por titulo, autor y/o año, lo que significa que si no ingresas un autor, el buscador solo te devolverá aquellos libros que coincidan con el titulo y el año.

Y normalmente para programar esto, uno realiza un código como el siguiente:

Pero podríamos olvidarnos de las sentencias IF realizando un código como este:

¿Cuál es la diferencia? Que en vez de utilizar la sentencia IF, podemos crear un método de extensión llamado If para poder condicionar los métodos de Linq. 👍

¿Y cómo creamos ese método de Linq?

  1. Necesitamos un método de extensión de IEnumerable<T> que también devuelva un IEnumerable<T>. También se podría crear un método para IQueryable<T>.
  2. Además este método debe recibir un parámetro booleano.
  3. Y el último parámetro seria un array de funciones lambda, que serán ejecutadas solo si el parámetro anterior es True.

Teniendo el método, ¿Qué código debe tener?

Si el parámetro booleano es True, entonces podemos usar el método Aggregate que nos devuelve el resultado de los resultados 🤪 de cada lambda del array recibido.

Pero si es False, entonces devolvemos el IEnumerable<T> sin ser modificado.

Acá les dejó un ejemplo de una clase que podrían tener en sus proyectos para utilizar el método de extensión If. 👇

Ventajas

  1. Código más descriptivo.
  2. Código limpio de sentencias If.
  3. Podes usar este método para crear métodos de extensión más específicos y descriptivos como WhereIf(), ReverseIf(), TakeIf(), IncludeIf() y mucho más 💪

Conclusión

En mi opinión un buen código debe ser bien descriptivo, y ésta es una manera de hacerlo. Aparte su implementación es sencilla y los casos de uso son varios.

Así que sin más para decir les dejo mi Fork del repositorio mencionado al principio, donde implemento el WhereIf(), y el link con el proyecto levantado.

Demo: https://dashboard.heroku.com/apps/conditionallinqqueryengine

Repositorio: https://github.com/lauchacarro/ConditionalLinqQueryEngine