Математическая операция C # datagridview затем передает данные в список - PullRequest
0 голосов
/ 31 октября 2011

В моем графическом интерфейсе 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 
                              };

1 Ответ

0 голосов
/ 31 октября 2011

Вам, вероятно, придется немного его отрегулировать, потому что я не знаю, какую структуру данных вы поместите в список, но должен дать вам представление. Это не Linq, но попытка сжать все в запросе Linq не обязательно помогает удобочитаемости и обслуживанию кода.

class FileExtract
{
    public int FileId { get; set; }
    public int Start { get; set; }
    public int End { get; set; }
}


var fileExtracts = new List<FileExtract>();
// take first entry as initializer
var current = new FileExtract 
              { 
                  FileId = ListBoxEdit1.First().file_id, 
                  Start = 0, 
                  End = ListBoxEdit1.First().end_line
              };
int lastEnd = current.End;
// skip first entry of the list as it was already used as initializer
foreach (var p in ListBoxEdit1.Skip())
{
    if (current.FileId != p.file_id)
    {
        current.End = lastEnd;
        fileExtract.Add(current);
        current = new FileExtract { FileId = p.file_id, Start = lastEnd + 1, End = p.end_line };          
    }
    lastEnd = p.end_line;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...