Depende de qué tipo de LINQ que quiere decir.
¿Es linq-to-sql? En ese caso, es un orm con todos los mismos beneficios que se obtienen al usar cualquier otro orm. No lo uso mucho y realmente no puedo decir más.
¿Es linq-to-objects? En ese caso, realmente está hablando de una colección de otras cosas: métodos de extensión, iteradores perezosos y una sintaxis de comprensión de consultas.Es una introducción al mundo de la programación funcional. No tengo mucho uso para la sintaxis de comprensión de consultas, pero para el resto, puedo demostrar mejor con un ejemplo.
Digamos que usted quiere leer un archivo en línea por línea. Para cada línea, que desea comprobar si cumple con algunos criterios, convertir una porción de esas líneas a un entero, y resumir la primera 10 de esos números enteros que son también dentro de un cierto rango. Aquí está la vieja manera que haría que:
int SumXValues(string filename)
{
string line;
int sum = 0;
int count = 0;
using (var rdr = new StreamReader(filename))
{
while ((line = rdr.ReadLine()) != null && count < 10)
{
int val;
if (int.TryParse(line.Substring(3,3))
{
if (val > 4 && val < 25)
{
sum += val;
count ++;
}
}
}
}
return sum;
}
Aquí está la nueva forma:
IEnumerable<string> ReadLines(string filename)
{
string line;
using (var rdr = new StreamReader(filename))
while ((line = rdr.ReadLine()) != null)
yield return line;
}
int SumXValues(string filename)
{
return ReadLines(filename)
.Select(l => l.Substring(3,3))
.Where(l => int.TryParse(l))
.Select(i => int.Parse(i))
.Where(i => i > 4 && i < 16)
.Take(10)
.Sum(i => i);
}
Aviso el nuevo código es en realidad más corto. Pero ¿por qué también es mejor ? Hay (al menos) 4 razones:
- Esperemos que sea evidente la forma reutilizable es la función readlines. También podría factorizar más, pero el objetivo es mostrar cómo este estilo le ayuda a reutilizar más código.
- se escala mejor. Observe todas las llamadas a funciones encadenadas en esa última función. ¿Sabes cuántas veces ese código iterará sobre las líneas en tu archivo? ¡Exactamente una vez! De hecho, ni siquiera eso, ya que dejará de leer el archivo después de tomar los primeros 10 elementos. ¿Y si lo cambia para devolver un enumerable y luego usarlo en otro lugar con otros métodos de extensión? ¡Solo una vez! Esto le permite crear, mezclar y remezclar sus resultados de la consulta en tiempo de ejecución sin pases adicionales costosos en sus listas.
- es más fácil de mantener. Si el criterio cambia, es fácil detectar la "regla" exacta (si lo desea) que le interese y modificar solo esa parte.
- es más legible. Esto le permite expresar el código en términos de lo que está haciendo en lugar de cómo lo hace.
Hay un voto para cerrar por razones de "subjetivo y argumentativo". Eso es idiota! Esta es una pregunta simple sobre el valor único de Linq. (Por otro lado, seguramente es una pregunta muy duplicada sobre SO, por lo que podría cerrarse por ese motivo.) –
Estoy dispuesto a apostar que son votos "wiki o cercanos". Es subjetivo, por lo que probablemente debería ser una pregunta wiki. – Greg
Gracias Earwicker. Solo tenía curiosidad, no entiendo por qué la gente piensa que esto es una razón subjetiva. No sabía que preguntar cómo codificar en una función sería subjetivo. La comunidad estos días. Tsk. – nubela