🔍 LINQ = Query Collections
Loops are messy. LINQ queries collections cleanly. Filter, sort, group, aggregate — all in one.
❌ Imperative Loops
var adults = new List<User>();
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<int> { 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<User> { ... };
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.”
