В части LINQ вы находитесь внутри одной строки, поэтому вы можете сначала исключить пустые строки:
from line in File.ReadAllLines(@"alkahf.txt")
where !string.IsNullOrEmpty(line)
Затем вы делаете два разбиения - одно на новой строке, что странно (поскольку этого не будет, поскольку мы знаем, что читаем строки). Я ожидаю Вы имеете в виду что-то вроде:
let parts = line.Split('.')
where parts.Length == 2
select new {
Index = parts[0],
Text = parts[1]
};
Также обратите внимание, что ReadAllLines
является буферизованной операцией; если вы хотите истинную потоковую передачу, вы можете захотеть что-то вроде:
public static IEnumerable<string> ReadLines(string path) {
using(var reader = File.OpenText(path)) {
string line;
while((line = reader.ReadLine()) != null) {
yield return line;
}
}
}
без буферизации (вы не загружаете весь файл сразу). Просто измените первую строку на:
from line in ReadLines(@"alkahf.txt")