Publicidad
Patrocinador Verificado
Infraestructura Cloud, GPU Clusters y APIs de IA para Desarrolladores
Despliega pipelines de inferencia y trading con latencia ultra baja. Explora planes.
Conocer Más →

Cheatsheet de C# LINQ y Expresiones: Sintaxis de Consulta y Métodos

Domina C# Language Integrated Query (LINQ), ejecución diferida (IEnumerable vs IQueryable), proyecciones Select/SelectMany, agrupaciones GroupBy y uniones de datos de alto rendimiento.

Respuesta rápida: ¿qué es LINQ en C#?

LINQ (Language Integrated Query) es la forma integrada de C# para consultar colecciones en memoria, bases de datos y otras fuentes con una misma sintaxis, sin escribir bucles manuales para filtrar, ordenar, agrupar o proyectar datos.

Tienes dos sintaxis equivalentes: la sintaxis de consulta (from … where … select) y la sintaxis de métodos (Where, Select, OrderBy, GroupBy). La consulta no se ejecuta hasta que la recorres o la materializas con ToList() o ToArray(): eso es la ejecución diferida que resume esta cheatsheet.

Para profundizar, consulta la Guía Maestra de C# LINQ y Rendimiento en Memoria y el resto de guías de la categoría C#.

🧪
Ejecuta y Edita este Código en Vivo Sin instalaciones locales. Soporta Python 3, JS y SQL.
▶ Probar en Playground →

1. Essential LINQ Transformations

LINQ operators use deferred execution until materialized by ToList(), ToArray(), or enumeration via foreach.

CODE SNIPPET
// Filtering and transforming collections
var highValueCustomers = customers
    .Where(c => c.IsActive && c.TotalPurchases > 1000)
    .OrderByDescending(c => c.TotalPurchases)
    .Select(c => new { c.Id, c.FullName, Tier = "VIP" })
    .ToList();

// GroupBy aggregation
var salesByCategory = orders
    .GroupBy(o => o.Category)
    .Select(g => new { Category = g.Key, TotalRevenue = g.Sum(x => x.Price) });

2. C# Records and Value Equality

Records provide built-in value-based equality, concise syntax, and safe immutability for domain models and DTOs.

CODE SNIPPET
// Positional record declaration with immutable properties
public record Developer(string Name, string Language, int ExperienceYears);

// Non-destructive mutation using 'with' expression
var dev1 = new Developer("Alex", "C#", 5);
var dev2 = dev1 with { Language = "F#" };

// Value-based equality check (returns true)
bool areEqual = dev1 == new Developer("Alex", "C#", 5);
Publicidad
Patrocinador Verificado
Trading Cuantitativo y 30 Modelos de Negocio con IA
Genera ingresos predecibles con retainers mensuales y bots automatizados.
Ver Blueprints →

3. Memory Optimization with ReadOnlySpan<T>

ReadOnlySpan allows slicing contiguous memory without triggering heap allocations or garbage collection pressure.

CODE SNIPPET
// Zero-allocation string parsing using ReadOnlySpan
string log = "2026-09-12|ERROR|ServiceUnavailable";
ReadOnlySpan<char> span = log.AsSpan();

int firstDelimiter = span.IndexOf('|');
ReadOnlySpan<char> dateSpan = span.Slice(0, firstDelimiter);
ReadOnlySpan<char> rest = span.Slice(firstDelimiter + 1);

int secondDelimiter = rest.IndexOf('|');
ReadOnlySpan<char> levelSpan = rest.Slice(0, secondDelimiter);

🚀 Ruta de Aprendizaje y Modelos de Negocio Asociados

📚 Guía Completa Paso a Paso

Guía Maestra de C# LINQ & Rendimiento en Memoria

Ejecución diferida, proyecciones avanzadas y optimización de memoria con Spans.

Leer Guía Completa →
💰 Modelo de Negocio Monetizable

Modernización de Código Legacy con IA ($2,500/mes)

Migra sistemas empresariales monolíticos a microservicios modernos en .NET 9.

Ver Plan de Negocio →

¿Necesitas otra hoja de trucos?

Añadimos nuevas guías de referencia cada semana según las peticiones de la comunidad.

Solicitar una Cheatsheet →

Preguntas frecuentes sobre LINQ en C#

¿Qué es LINQ en C#?

LINQ (Language Integrated Query) permite escribir consultas directamente en C# sobre colecciones, bases de datos y otras fuentes de datos, con comprobación de tipos en tiempo de compilación y sin depender de cadenas de texto para la consulta.

¿Cuál es la diferencia entre sintaxis de consulta y sintaxis de métodos?

Ninguna en resultado: ambas se compilan a las mismas llamadas a operadores. La sintaxis de consulta (from … where … select) se lee como SQL y resulta cómoda para filtros y uniones; la sintaxis de métodos (Where, Select, GroupBy) es la única que cubre todos los operadores, como Take, Skip o FirstOrDefault.

¿Qué significa la ejecución diferida en LINQ?

Que definir una consulta no la ejecuta: el trabajo ocurre cuando la enumeras con foreach o la materializas con ToList() o ToArray(). Por eso una consulta construida sobre una colección que cambia después refleja esos cambios al enumerarla, y por eso conviene materializarla cuando necesitas una foto fija de los datos.

¿Cuándo usar IEnumerable y cuándo IQueryable?

Usa IEnumerable para colecciones en memoria, donde la consulta se ejecuta en tu proceso. Usa IQueryable frente a una base de datos u otro proveedor remoto, donde la consulta se traduce (por ejemplo, a SQL) y se ejecuta en la fuente. La guía maestra de LINQ desarrolla ambos casos con ejemplos de rendimiento.

Ejemplo trabajado: filtrar y ordenar con LINQ

En una frase: LINQ te permite consultar colecciones en C# describiendo qué quieres obtener (filtrar, ordenar, agrupar) en lugar de escribir el bucle a mano. El siguiente ejemplo usa estudiantes y notas: queremos los aprobados (nota mayor o igual a 70), ordenados de mayor a menor nota.

var estudiantes = new[]
{
    new { Nombre = "Ana", Nota = 85 },
    new { Nombre = "Luis", Nota = 62 },
    new { Nombre = "Marta", Nota = 91 },
    new { Nombre = "Pedro", Nota = 70 },
};

var aprobados = estudiantes
    .Where(e => e.Nota >= 70)
    .OrderByDescending(e => e.Nota)
    .Select(e => $"{e.Nombre}: {e.Nota}");

foreach (var linea in aprobados)
{
    Console.WriteLine(linea);
}

Salida esperada:

Marta: 91
Ana: 85
Pedro: 70

Luis (62) no aparece porque no alcanza el umbral de Where. Cambia el umbral y la salida cambia en consecuencia: esa es la forma más rápida de comprobar que entiendes cada operador antes de usarlo en un proyecto real.

Operadores LINQ más usados

OperadorQué haceEjemplo
WhereFiltra por condición.Where(e => e.Nota >= 70)
SelectProyecta a otra forma.Select(e => e.Nombre)
OrderBy / OrderByDescendingOrdena ascendente o descendente.OrderByDescending(e => e.Nota)
GroupByAgrupa por clave.GroupBy(e => e.Nota >= 70)
FirstOrDefaultPrimer elemento o valor por defecto.FirstOrDefault(e => e.Nota > 90)
Any / CountComprueba existencia / cuenta elementos.Any(e => e.Nota < 60)
Sum / AverageSuma / media.Average(e => e.Nota)

Para el recorrido completo, con explicaciones y casos avanzados, consulta la guía definitiva de C# LINQ. Sección añadida el 2026-11-02; el resto de la página no se ha modificado.