Using LINQ to Objects to simplify procedural code

How many times haven't you written procedural code to loop through lists to do sorting and filtering of items like this?

List<Position> positions = GetPositions();

// Sort the list and filter

SortedList<string, Position> openPositions = new SortedList<string,Position>();

foreach (Position position in positions)


    if (position.Quantity > 0.0)

        openPositions.Add(position.Paper, position); 


The above sample is of course very simple, but by using LINQ to Objects you are able to do it even simpler like this:


<Position> positions = GetPositions();
var openPositions = from p in positions where p.Quantity > 0.0 orderby p.Paper select p;

That was nice! I find that using LINQ to Objects makes my code more clean and even easier to read and understand.