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:
Dictionary<string, List<string>> fileGroups = new Dictionary<string, List<string>>();
foreach (string file in Directory.GetFiles(Environment.CurrentDirectory))
{
string extension = Path.GetExtension(file).ToLower();
if (!fileGroups.ContainsKey(extension))
{
fileGroups[extension] = new List<string>();
}
fileGroups[extension].Add(file);
}
Considere el equivalente de LINQ:
var query = from file in Directory.GetFiles(Environment.CurrentDirectory)
group file by Path.GetExtension(file).ToLower();
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:
foreach (var fileGroup in query)
{
Console.WriteLine(String.Format("*** Files with extension: {0}", group.Key));
foreach (string file in fileGroup)
{
Console.WriteLine(file);
}
}
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.