Inicio > Cursos > C# > LINQ: Where, Select, OrderBy
C#Colecciones y LINQLección 10 de 20

LINQ: Where, Select, OrderBy

LINQ (Language Integrated Query) es una de las características más distinguidas de C#: permite consultar datos con la misma sintaxis sin importar si están en una lista en memoria, una base de datos SQL, un archivo XML, o un servicio web. Fue introducido en C# 3.0 (2007) y literalmente cambió cómo se escribe C#.

La idea: en lugar de un loop for con condicionales y acumuladores, describes qué quieres y LINQ se encarga del cómo.

Operaciones principales de LINQ: • Where(f) → filtra: deja solo los elementos que cumplen la condición f • Select(f) → transforma cada elemento (como map en JavaScript) • OrderBy(f) → ordena según el valor que devuelve f

LINQ usa ejecución diferida: Where, Select y OrderBy no procesan nada al escribirlos, solo preparan una "receta". La consulta se ejecuta cuando llamas a una operación que da un resultado final.

Operaciones que ejecutan la consulta: • ToList() / ToArray() → guarda el resultado en una lista o un array • Count() → cuántos elementos hay. new[] { 1, 2, 3 }.Count() da 3 • First() → el primero (lanza un error si no hay ninguno) • Sum() → la suma. new[] { 1, 2, 3 }.Sum() da 6 Así, .Where(x => condicion).First() se detiene en cuanto encuentra el primero que cumple, sin recorrer el resto.

using System.Linq;

var numeros = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

// Where - filtrar
var pares = numeros.Where(n => n % 2 == 0).ToList();
// { 2, 4, 6, 8, 10 }

// Select - transformar (como map)
var cuadrados = numeros.Select(n => n * n).ToList();
// { 1, 4, 9, 16, 25, ... }

// Select con objeto anónimo
var personas = new[] {
    new { Nombre = "Ana", Edad = 25 },
    new { Nombre = "Bob", Edad = 30 },
    new { Nombre = "Carlos", Edad = 20 }
};

var nombres = personas.Select(p => p.Nombre).ToList();
var mayores = personas.Where(p => p.Edad >= 25).ToList();

// OrderBy / OrderByDescending
var ordenados = personas.OrderBy(p => p.Nombre).ToList();
var desc = personas.OrderByDescending(p => p.Edad).ToList();
var multi = personas.OrderBy(p => p.Edad).ThenBy(p => p.Nombre);

// Operaciones de agregación
int suma = numeros.Sum();             // 55
double promedio = numeros.Average();  // 5.5
int max = numeros.Max();              // 10
int min = numeros.Min();              // 1
int cantidad = numeros.Count();       // 10
int contarPares = numeros.Count(n => n % 2 == 0); // 5

// First / Last / Single
int primero = numeros.First();        // 1
int ultimo = numeros.Last();          // 10
int primerPar = numeros.First(n => n % 2 == 0); // 2
int? primeroPorDefecto = numeros.FirstOrDefault(n => n > 100); // null

// Any / All
bool hayPares = numeros.Any(n => n % 2 == 0);   // true
bool todosPares = numeros.All(n => n % 2 == 0); // false
Consejo🔍 LINQ usa ejecución diferida (lazy evaluation). La consulta no se ejecuta hasta que iteras los resultados o llamas ToList(), ToArray(), etc.
← Dictionary y HashSetLINQ Avanzado: GroupBy, Join, Aggregate →

Practica esta lección

Resuelve los ejercicios del curso de C# en la app, gratis y con corrección automática.

Empezar a practicar