Start here. This is the direct spoken answer to practice first.
Why this question matters
LINQ syntax can look like a computed collection even when it is only a recipe that runs again for every enumeration. Correctness depends on knowing the source and execution boundary.
Most sequence operators such as Where and Select use deferred execution: they build an iterator and run when the sequence is enumerated. Enumerating it twice usually runs the pipeline twice, so an expensive selector, a changing source, or a side effect can produce extra work or different results. I would materialize once with ToList or ToArray when the operation needs a stable snapshot or repeated traversal. I would leave it deferred when streaming one pass is valuable and the source is safe to enumerate again.