Muchas veces he encontrado desarrolladores manejando arreglos o listas con iteraciones y no evito pensar, ¿porqué no usan LINQ? Quiero pensar que es por desconocimiento porque con LINQ puedes manejar arreglos, listas, en fin, objetos de manera rápida, fácil y eficiente. Pero antes, ¿qué es LINQ?

LINQ es un componente del framework .Net que permite hacer queries contra objetos. Esto incluye arreglos, listas, datatables, etc.. La mejor manera de demostrar el poder que LINQ te otorga es con varios ejemplos.

Unas de las situaciones con la que frecuentemente nos topamos es con buscar un valor en específico o los elemento que cumplan con ciertas condiciones.

string[] nombres = { "Juan", "Pedro", "Roberto", "Luis", "Lucy", "Patricia" }; 
 
string juan = (from n in nombres
		     where n == "Juan"
		     select n).First();
      
Console.WriteLine("Nombre: " + juan);

Resultado:
Nombre: Juan

Como vemos, con varias lineas de código hacemos, de una manera limpia y elegante, lo que antes haciamos con iteraciones. Se preguntarán cómo funciona y verán lo simple que es.

La variable n representa cada elemento en el arreglo nombres. El select nos devuelve una lista de string así que tenemos que añadir el método First() para obtener el primer valor de la lista que es el que cumple con nuestra condición de que sea Juan.

De la misma manera podemos ordenar la lista

string[] nombres = { "Juan", "Pedro", "Roberto" }; 
 
var nombresOrdenados = from n in nombres
		     				  order by n 
				          select n;

foreach(var nom in nombresOrdenados)
{
	Console.WriteLine(juan);
}

Resultado:
Juan
Pedro
Roberto

También podemos usar operadores agregados como por ejemplo count, sum, min, max, etc.

string[] nombres = { "Juan", "Pedro", "Roberto" }; 
 
int cantidad = nombres.Count();

Console.WriteLine("Hay " + cantidad + " nombres en el arreglo");

Si necesitan más ejemplos hay una excelente página para eso aquí.