В моем графическом интерфейсе Winform есть сетевое представление, которое загружает CSV и собирает данные с тремя столбцами:
File_ID, Details, Конечная строка
0, sometext, 1
0, sometext, 3
0, sometext, 5
1, sometext, 9
1, sometext, 16
1, sometext, 23
2, sometext, 25
2, sometext, 27
2, sometext, 28
2, sometext, 30
Я хочу, чтобы это представление сетки было преобразовано в список, чтобы я мог сделать что-то вроде этого:
pList.Add (newFileExtract (1, 1, 148165));
pList.Add (new FileExtract (2, 148165, 166926));
, но скорее цикл, чем жесткая запись Добавить (новый FileExtract ...)
Список должен выглядеть примерно так:
ID, начало, конец
1, 0, 5
2, 6, 23
3, 24, 30
Обратите внимание, что:
- Для первой строки: ID = 1, начало = 0.
- ID = 1 относится к File_ID, воспринимайте идентификатор как счетчик
- Начало для ID 2, это конец идентификатора 1 плюс1, начало ID 3 = конец ID 2 плюс
Бит, который работает:
var filesplitc = from p in ListBoxEdit1
group p by p.file_id into grp
let MaxP = grp.Max(g => g.RunningTotal)
from p in grp
where p.RunningTotal == MaxP
select p;
var filesplitc1 = from p in filesplitc
select new { file_id = p.file_id, startingline = (p.file_id == 0) ? "0" : "", endingline = p.RunningTotal };
Бит, который не работает:
var filesplitc2 = from p in filesplitc1
select new {
file_id = p.file_id,
startingline = p.startingline == "" ? ((from x in filesplitc1 where (Convert.ToInt32(x.file_id) <= Convert.ToInt32(p.file_id)) select x.endingline).Last()) : p.startingline,
endingline = p.endingline
};