Tell the compiler what to do, not how to do it. As an example, foreach (var item in list)
is better than for (int i = 0; i < list.Count; i++)
and m = list.Max(i => i.value);
is better than list.Sort(i => i.value); m = list[list.Count - 1];
.
By telling the system what you want to do it can figure out the best way to do it. LINQ is good because its results aren't computed until you need them. If you only ever use the first result, it doesn't have to compute the rest.
Ultimately (and this applies to all programming) minimize loops and minimize what you do in loops. Even more important is to minimize the number of loops inside your loops. What's the difference between an O(n) algorithm and an O(n^2) algorithm? The O(n^2) algorithm has a loop inside of a loop.