LINQ looks clean and harmless in C#.
But in real backend APIs, small mistakes can quietly turn into serious performance issues.
Here are 3 I’ve seen (and made) while working with .NET and Entity Framework:
1. Loading entire tables into memory
A common mistake is doing this:
var orders = dbContext.Orders.ToList();
var recent = orders.Where(o => o.CreatedAt > DateTime.UtcNow.AddDays(-7));
This pulls everything into memory first, then filters in C#.
The problem:
- unnecessary memory usage
- slow processing on large datasets
- wasted database optimization
Fix:
Let the database do the work:
var recent = dbContext.Orders
.Where(o => o.CreatedAt > DateTime.UtcNow.AddDays(-7))
.ToList();
2. Hidden multiple database calls
LINQ queries can be deceptively reused:
var query = dbContext.Orders.Where(o => o.Total > 100);
var count = query.Count();
var list = query.ToList();
This can result in multiple database executions depending on how it's used.
Fix:
Materialize once:
var list = dbContext.Orders
.Where(o => o.Total > 100)
.ToList();
var count = list.Count;
3. Fetching more data than needed
Another common issue:
var orders = dbContext.Orders.ToList();
var result = orders.Select(o => new
{
o.Id,
o.CustomerName
});
You are still loading full rows from the database even though you only need 2 fields.
Fix:
Project early:
var result = dbContext.Orders
.Select(o => new
{
o.Id,
o.CustomerName
})
.ToList();
Key idea
LINQ itself is not the problem.
The real issue is where the execution happens:
- in memory
- or in the database
In backend systems, that difference matters a lot.
Closing thought
Most performance issues in APIs are not “big architecture problems”.
They start with small LINQ decisions like these.
Top comments (2)
Nice post! I´m also big on squeezing every drop of performance out my LINQ queries. Only querying what I need and no more!
Thank you, greatly appreciate it!
Exactly! And once you also avoid things like calling ToList() too early, which forces everything to materialize right away, LINQ's performance becomes way more predictable.