Cada vez que veo una pregunta publicada en Stack Overflow en C #, veo al menos una o dos respuestas publicadas que resuelven un problema con LINQ. Por lo general, las personas con muy buena reputación parecen usar LINQ como profesionales.
Entonces mi pregunta es, ¿para qué dominio de problema se debe usar LINQ?
También en las notas al margen: ¿Hay algún propósito en el que deba evitarse? ¿El tamaño del conjunto de datos afecta el rendimiento de las consultas LINQ?
c#
linq
professional-development
usuario1816120
fuente
fuente
Respuestas:
LINQ está diseñado principalmente para permitir consultas funcionales puras y transformaciones en secuencias de datos (notará que todas las extensiones LINQ aceptan delegados Func pero no delegados Action). En consecuencia, el caso más común de un bucle que no encaja muy bien con LINQ es uno que se trata de efectos secundarios funcionales no puros, p. Ej.
Para mejorar en el uso de LINQ, solo practique usarlo.
Cada vez que usted está a punto de escribir
for
o deforeach
bucle para hacer algo con una colección, parada, considere si es un buen ajuste para LINQ (es decir, no se trata sólo de realizar un efecto de acción / lateral sobre los elementos), y si es así se obligue a escribir usando LINQ.También puede escribir la
foreach
versión primero y luego volver a escribirla en una versión LINQ.Como señala svick, LINQ debería ser para hacer que su programa sea más legible. Por lo general, es bueno en esto, ya que tiende a enfatizar la intención del código en lugar del mecanismo; sin embargo, si descubre que no puede hacer que sus consultas sean más legibles que un bucle simple, no dude en seguir el bucle.
Si necesita ejercicios para practicar, la mayoría de los ejercicios de programación funcional se correlacionarán muy bien con LINQ, por ejemplo, 99 problemas (especialmente los primeros 20 más o menos) o el proyecto Euler .
fuente
Aggregate()
. Creo que la mayoría de las veces, el bucle es más legible.Para responder la pregunta editada: en resumen, es beneficioso usar LINQ siempre que tenga que implementar la funcionalidad de "consulta" (eso es lo que significa la Q en LINQ). Definir un dominio exacto es difícil, pero simplifica enormemente una variedad de tareas asociadas con la extracción y manipulación de datos de colecciones.
Para explicar un poco, se ha incorporado una gran cantidad de funcionalidades de consulta directamente al lenguaje (o más bien, a los diversos implementadores de LINQ), por lo que se manejan cosas como agregaciones, ordenación, agrupación, filtrado, proyecciones, uniones (y muchas más). tú. Las soluciones basadas en LINQ también suelen ser mucho más cortas que si las implementara "a mano", y también comunican su intención mucho mejor.
Un ejemplo simple que a menudo ayuda a transmitir el poder de LINQ es mostrar los contenidos de un directorio, agrupados por extensión. Ejecute una implementación imperativa típica en su cabeza: habrá muchos detalles de implementación ya desde el principio. Quizás usaremos a
Dictionary<String, List<String>>
para indexar los archivos por extensión. Por supuesto, tendremos que verificar si ya existe una clave, instanciar una lista, agregarla, etc. Podría ser algo como:Considere el equivalente de LINQ:
Tenga en cuenta que la consulta en sí es de solo 2 líneas, ciertamente más corta que cualquier solución imperativa que podríamos haber ideado. También es bastante legible; La relación señal-ruido es más alta que con la primera solución. Para aquellos que son nuevos en LINQ, generará los resultados de esa consulta de la siguiente manera:
Con ejemplos más complejos, las diferencias normalmente se vuelven aún más vastas (considere simplemente agrupar por múltiples campos, por ejemplo). Entonces, para resumir, LINQ resuelve muchos problemas de consulta de datos "día a día" de una manera que a menudo es más corta y más descriptiva. Esto tiene un costo leve de tener que aprender la sintaxis y la tecnología, pero los beneficios superan en gran medida a los negativos.
fuente
Se han desarrollado diferentes lenguajes a lo largo del tiempo para los diversos tipos de fuentes de datos, por ejemplo, SQL para bases de datos relacionales y XQuery para XML. Por lo tanto, los desarrolladores han tenido que aprender un nuevo lenguaje de consulta para cada tipo de fuente de datos o formato de datos que deben admitir. LINQ simplifica esta situación al ofrecer un modelo consistente para trabajar con datos en varios tipos de fuentes y formatos de datos. En una consulta LINQ, siempre está trabajando con objetos. Para más información visite http://msdn.microsoft.com/en-us/library/bb397906.aspx
fuente