The biggest advantage for me is readability.
Consider for a moment a typical LINQ statement that uses method chaining:
var total = myList.Where(x => x.num > 5)
.Select(x => x.num)
.Distinct()
.Aggregate((total, next) => total + next);
Pretty easy to read. But you could use the static methods to do the same thing.
var total = Enumerable.Aggregate(Enumerable.Distinct(Enumerable.Select(Enumerable.Where(myList, x => x.num > 5), x.num)), (total, next) => total + next);
And even if I format it a little:
var total = Enumerable.Aggregate(
Enumerable.Distinct(
Enumerable.Select(
Enumerable.Where(myList, x => x.num > 5)
, x.num)
)
, (total, next) => total + next);
It still is hard to read. The lamdas are very far from the function names they go with. It becomes pretty hard to untangle that and understand what is really going on. The method chaining version is far easier to read (at least for me).
Pick what makes the code easiest to read and use. If an operation could be applicable to an object in most or any context, I'd go with an extension method (transformations, formatting, etc.) If it is only applicable in a certain context go with static methods (InterestCalculator.CalculateInterest(decimal principle, decimal interestRatePerMonth, int numberOfMonths)
would make a poor extension method for either decimals or integers).