Skill 11 - LINQ Querying
Core Concepts
LINQ lets code describe what sequence result is wanted: filter, project, sort, group, join, aggregate, and transform.
LINQ Parts
- Extension methods such as
Where, Select, OrderBy, GroupBy, and Join provide the operations.
- Providers execute expressions against in-memory objects, EF Core, XML, or other sources.
- Lambda expressions express predicates and projections.
- Query comprehension syntax is optional and maps to method calls.
Rules
- Prefer method syntax for simple pipelines.
- Consider query syntax for multi-join/group queries when readability improves.
- Understand deferred execution: queries may not run until enumerated.
- Materialize with
ToList, ToArray, or similar only when needed.
- Avoid multiple enumeration of expensive queries.
- Place filters early.
- For EF Core, ensure the query can translate to SQL.
- Do not call custom .NET methods inside EF queries unless they can be translated.
Common Operations
Where filters.
Select projects.
OrderBy / ThenBy sorts.
GroupBy groups.
Join, GroupJoin, LeftJoin, and RightJoin combine sequences where available.
Any checks existence.
All checks universal conditions.
Count, Sum, Average, Min, Max aggregate.
Performance Rules
- Avoid materializing before filtering.
- Use
Any() instead of Count() > 0 for existence.
- Use
TryGetNonEnumeratedCount when count may be available cheaply.
- Be careful with closures in loops.