Dividir string na lista de strings de comprimento N usando LINQ

Eu sei que o conceito de String.Split foi abordado antes com uma infinidade de diferentes abordagens, mas estou especificamente interessado em uma solução LINQ para essa questão.

Eu tentei escrever uma classe de extensão para lidar com a divisão, mas ambas as tentativas têm alguns problemas importantes. Então, para o seguinte:

string s = "ABCDEFGHIJKLMNOPQRSTUVWX";
var results = s.SplitEvery(4);

Eu gostaria de uma lista como: "ABCD", "EFGH", "IJKL", "MNOP", "QRST", "UVWX"}

Aqui está minha classe de extensão:

public static class Extensions
{
    public static List<string> SplitEvery(this string s, int n)
    {
        List<string> list = new List<string>();

        var Attempt1 = s.Select((c, i) => i % n== 0 ? s.Substring(i, n) : "|").Where(x => x != "|").ToList();

        var Attempt2 = s.Where((c, i) => i % n== 0).Select((c, i) => s.Substring(i, n)).ToList();

        return list;
    }
}

A tentativa 1 insere uma string fictícia "|" toda vez que a condição não for atendida, remove todas as instâncias da cadeia fictícia para criar a lista final. Funciona, mas criar as strings ruins parece um passo extra desnecessário. Além disso, essa tentativa falha se a string não for divisível por n.

Tentativa 2 estava me tentando selecionar apenas substrings onde o índice era divisível por N, mas o valor 'i' na instrução Select não corresponde ao valor 'i' na instrução Where, então eu obtenho resultados como: {" ABCD "," BCDE ", etc ...}

Eu sinto que estou perto de uma boa solução, mas poderia usar um empurrão útil na direção certa. Alguma sugestão?

[Editar]

Acabei indo com uma combinação de sugestões para lidar com o meu divisor de cordas. Pode não ser o mais rápido, mas como novato no LINQ, essa implementação foi a mais sucinta e fácil de entender.

public static List<string> SplitEvery(this string s, int size)
{
    return s.Select((x, i) => i)
        .Where(i => i % size == 0)
        .Select(i => String.Concat(s.Skip(i).Take(size))).ToList();
}

Obrigado por todas as excelentes sugestões.

questionAnswers(8)

yourAnswerToTheQuestion