Q: How to find the second greatest element in a list with LINQ Suppose we have a class (SomeClass) with two fields, an ID of type int and a date of type DateTime.
Now imagine that there is a list of SomeClass ordered by date and we need to find the second to last element of the list. How would we do this with LINQ?

A: var nextToLast = list.Skip(list.Count - 2).First();

as @Brizio points out, you can use good ol' indexing too
var nextToLast = list[list.Count - 2];


A: Here is one for the second place:
In your comparison:
public class YourCustomClassComparer : IComparer<YourObject> {
    public int Compare(YourObject x, YourObject y) {
        //do whatever you need to do to compare
    }
}

and your method (this will grab the second in the list)
var result = list.OrderBy(a => a, new YourCustomClassCompairer()).ElementAt(1);

And if you wanted the inverse (which i noticed in your question), do the following
var result = list.OrderByDescending(a => a, new YourCustomClassCompairer()).ElementAt(1);

