Start here. This is the direct spoken answer to practice first.
Why this question matters
LINQ and loops can express the same result while making very different execution details, failure paths, and maintenance costs visible.
I prefer LINQ when it expresses a straightforward data transformation clearly. I use an explicit loop when the operation needs complex state, early exit with detailed failure information, controlled mutation, several outputs, or measured performance that the LINQ form obscures. A loop can also make a one-pass requirement obvious when a fluent chain would enumerate or allocate more than intended.