IEnumerable Extensions Linq AllOrDefault() Each()
In those places you use new List&lt;T&gt;(), I would recommend using Enumerable.Empty&lt;T&gt;() in its place. It's a little more idiomatic and, as those empty collections are cached by the runtime, repeated calls don't new up more stuff to be GC'd later.

items.Count() &gt; 0 can be replaced with items.Any(), which is more descriptive of what you're trying to test for, and will likely be cheaper computationally. More specifically,

public static bool AnyML&lt;T&gt;(this IEnumerable&lt;T&gt; items, Func&lt;T, bool&gt; predicate)
{
    if (items == null) return false;

    items = items.Where(predicate);

    return items.Count() &gt; 0;
}


can be replaced with

public static bool AnyML&lt;T&gt;(this IEnumerable&lt;T&gt; items, Func&lt;T, bool&gt; predicate)
{
    if (items == null) return false;

    return items.Any(predicate);
}


** EDITED TO ADD **

public static IEnumerable&lt;T&gt; EachML&lt;T&gt;(this IEnumerable&lt;T&gt; items, Action&lt;T&gt; fn)
{
    var e = items.GetEnumerator();
    while (e.MoveNext())
    {
        fn(e.Current);
    }
    return items;
}


has a small bug - items.GetEnumerator() returns an IEnumerator&lt;T&gt;, which implements IDisposable. This means you should Dispose() of it when you're done using it (see https://stackoverflow.com/a/232616/3312 for good info). Write it like this to do so:

    using (var e = items.GetEnumerator())
    {
        while (e.MoveNext())
        {
            fn(e.Current);
        }
    }
    return items;
}