🔍 LINQ = Query Collections
Loops are messy. LINQ queries collections cleanly. Filter, sort, group, aggregate — all in one.
❌ Imperative Loops
var adults = new List(); foreach (var user in users) { if (user.Age >= 18) adults.Add(user); }
✅ LINQ Query
var adults = users
.Where(u => u.Age >= 18)
.ToList();
📝 LINQ Methods
var numbers = new List{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; // Filter var evens = numbers.Where(n => n % 2 == 0); var evensList = evens.ToList(); // [2, 4, 6, 8, 10] // Select (project) var doubled = numbers.Select(n => n * 2).ToList(); // Filter and select var squaredEvens = numbers .Where(n => n % 2 == 0) .Select(n => n * n) .ToList(); // [4, 16, 36, 64, 100] // Order var sorted = numbers.OrderBy(n => n).ToList(); var sortedDesc = numbers.OrderByDescending(n => n).ToList(); // First/Last var first = numbers.First(); var last = numbers.Last(); var firstEven = numbers.First(n => n % 2 == 0); var maybeFirst = numbers.FirstOrDefault(n => n > 10); // Aggregate var sum = numbers.Sum(); var avg = numbers.Average(); var min = numbers.Min(); var max = numbers.Max(); var count = numbers.Count(); // Group var users = new List { ... }; var byAge = users.GroupBy(u => u.Age); foreach (var group in byAge) { Console.WriteLine($"Age {group.Key}: {group.Count()} users"); } // Distinct var unique = numbers.Distinct().ToList(); // Skip/Take (paging) var page2 = numbers.Skip(3).Take(3).ToList(); // [4, 5, 6] // LINQ Tips - Use ToList() to execute query - LINQ is lazy (executed when iterated) - Order matters for performance - Use FirstOrDefault() for safety - Use Any() instead of Count() > 0
💡 LINQ Tips
- Use ToList() to execute query
- LINQ is lazy (executed when iterated)
- Order matters for performance
- Use FirstOrDefault() for safety
- Use Any() instead of Count() > 0
“LINQ queries collections elegantly. Filter, sort, group — all in one. Essential for C# development.”
