LINQ Performance Tips for C# Developers
LINQ (Language Integrated Query) is one of C#’s most powerful features, but it can impact performance if not used carefully. Let’s explore how to optimize your LINQ queries.
Deferred vs Immediate Execution
Understanding when LINQ executes is critical for performance:
// Deferred - query doesn't execute until enumeration
var query = numbers.Where(n => n > 5);
// Immediate - executes right away
var list = numbers.Where(n => n > 5).ToList();
Avoid Multiple Enumerations
One of the most common performance issues is enumerating a query multiple times:
// Bad - enumerates twice
var query = GetExpensiveData().Where(x => x.IsActive);
var count = query.Count();
var items = query.ToList();
// Good - enumerate once
var items = GetExpensiveData().Where(x => x.IsActive).ToList();
var count = items.Count;
Use Any() Instead of Count()
When checking if items exist, use Any() instead of Count() > 0:
// Inefficient
if (collection.Count() > 0)
// Efficient
if (collection.Any())
Consider IEnumerable vs IQueryable
For database queries, use IQueryable to ensure filtering happens on the database server, not in memory.
By following these tips, you can write LINQ queries that are both expressive and performant.
