Всегда есть обязательная реализация LINQ. Скорее всего, бесполезная производительность, но с каких пор производительность мешает использовать новые интересные функции?
var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
var sequence = from one in letters
from two in letters
from three in letters
from four in letters
orderby one, two, three, four
select new string(new[] { one, two, three, four });
'sequence' теперь будет IQueryable, который содержит от AAAA до ZZZZ.
Edit:
Хорошо, поэтому меня беспокоило, что с помощью LINQ можно создать последовательность настраиваемой длины с настраиваемым алфавитом. Так и здесь. Опять же, совершенно бессмысленно, но меня это беспокоило.
public void Nonsense()
{
var letters = new[]{"A","B","C","D","E","F",
"G","H","I","J","K","L",
"M","N","O","P","Q","R","S",
"T","U","V","W","X","Y","Z"};
foreach (var val in Sequence(letters, 4))
Console.WriteLine(val);
}
private IQueryable<string> Sequence(string[] alphabet, int size)
{
// create the first level
var sequence = alphabet.AsQueryable();
// add each subsequent level
for (var i = 1; i < size; i++)
sequence = AddLevel(sequence, alphabet);
return from value in sequence
orderby value
select value;
}
private IQueryable<string> AddLevel(IQueryable<string> current, string[] characters)
{
return from one in current
from character in characters
select one + character;
}
Вызов метода Sequence приводит к тому же списку AAAA-ZZZZ, что и раньше, но теперь вы можете изменить используемый словарь и продолжительность получаемых слов.