CSVHelper помещает значения из разных строк в один файл в базе данных

#c# #csvhelper

#c# #csvhelper

Вопрос:

У меня есть файл .csv, структурированный следующим образом, первая строка — это столбец заголовка, для каждого SomeID мне нужно сложить значения NetCharges вместе (или вычесть, если код требует этого) и поместить каждый элемент в отдельный столбец по столбцу SomeCode.

Вот файл, который я получаю; SomeID, порядковый номер, код, чистая стоимость, всего 23473,30388, LI 126.0000, 132.00 96021, 000111, LI 130.00, 126.00 23473,30388, FU 6.0000, 132.00 4571A, 10452, LI 4100.0000, 4325.0000 4571A, 10452, FU 150,00, 4325.0000 4571A,10452,DT,75.00,4325.0000

Мне нужно вставить данные в мою таблицу sql, которая структурирована следующим образом. Это то, к чему я стремлюсь:

ИДЕНТИФИКАТОР порядковый номер LICode LICodeValue FUCode FUCodeValue DTCode, DTCodeValue, всего 23473 30388n LI 126.000 FU 6.0000 NULL NULL 132.0000 4571A 10452 LI 4100.0000 FU 150.0000 DT 75.00 4325.0000

Мой SomeID не всегда будет сгруппирован вместе, как идентификатор 4571A.Мне в основном нужно перебрать этот файл и создать одну запись для каждого SomeID. Кажется, я не могу найти способ с помощью CSVHelper. Я использую C # и CSVHelper. До сих пор я проверял это, но я не могу вернуться к SomeId после перехода к следующему: используя (var reader = new StreamReader( «C:testFilessome.csv » ))

         using (var csv = new CsvReader( reader, CultureInfo.InvariantCulture ))
        {
            
            var badRecords = new List<string>();
            var isRecordBad = false;

            csv.Configuration.HasHeaderRecord = true;
            csv.Configuration.HeaderValidated = null;
            csv.Configuration.IgnoreBlankLines = true;
            csv.Configuration.Delimiter = ",";

            csv.Configuration.BadDataFound = context =>
            {
                isRecordBad = true;
                badRecords.Add( context.RawRecord );
            };
            csv.Configuration.MissingFieldFound = ( s, i, context ) =>
            {
                isRecordBad = true;
                badRecords.Add( context.RawRecord );
            };

            List<DataFile> dataFile = csv.GetRecords<DataFile>().ToList();

            //initialize variable
            string lastSomeId = "";

            if (!isRecordBad)
            {
                foreach (var item in dataFile)
                {
                    // check if its same record
                    if (lastSomeId != item.SomeID)
                    {
                        MyClass someClass = new MyClass();
                        lastSomeId = item.SomeID;
                        //decimal? LI = 0;//was going to use these as vars for calculations not sure I need them???
                        //decimal? DSC = 0; 
                        //decimal? FU = 0;

                       
                        someClass.Id = lastSomeId;
                        someClass.OrdNum = item.OrderNumber;
                        
                        
                        if (item.Code == "LI")
                        {
                            someClass.LICode = item.Code;
                            someClass.LICodeValue = item.NetCharge;
                        }
                        if (item.Code == "DT")
                        {
                            someClass.DTCode = item.Code;
                            someClass.DTCodeValue = item.NetCharge
                        }
                        if (item.Code == "FU")
                        {
                            someClass.FUCode = item.Code;
                            someClass.FUCodeValue = item.NetCharge;
                        }
                        someClass.Total = (someClass.LICodeValue   someClass.FUCodeValue);
                        
                        //check for other values to calculate
                      
                        
                        //insert record to DB
                    }
                    else
                    {
                        //Insert into db after maipulation of values
                    }
                }
            }

            isRecordBad = false;
        }//END Using
  

Любые подсказки будут высоко оценены. Заранее благодарю вас.

Комментарии:

1. Итак, я отсортировал свой список. Забыл, что я мог бы выполнить простой запрос Linq, чтобы получить его в том порядке, в котором мне нужно последовательно читать. dataFile = Файл данных. Порядок убывания ( x => x.documentId ). ToList();

2. Итак, теперь мой список отсортирован для повторения и помещает все в правый столбец: SomeID, OrderNumber, Code, NetCharge, всего 23473,30388, LI 126.0000, 132.00 23473,30388, FU 6.0000, 132.00 96021, 000111, LI 130.00, 126.00 4571A, 10452, LI 4100.0000, 4325.0000 4571A, 10452,FU, 150,00,4325,0000 4571A,10452, DT, 75,00,4325,0000