Я повторно отредактировал этот вопрос ниже. У меня есть файл примера, который представляет собой несколько заказов на покупку в файле, который идентифицирован во втором столбце.
Номер заказа, Номер покупки, ДАТА, Код товара, Кол-во, Описание
1245456,98978,12 / 01/2019, 1545-878, 1, «Тест»
1245456,98978,12 / 01 / 2019,1545-342,2, "Тест"
1245456,98978,12 / 01 / 2019,1545-878,2, "Тест"
1245456,98979,12 / 02 / 2019,1545-878,3, "Испытание 3"
1245456,98979,12 / 02 / 2019,1545-342,4, "Испытание 4"
1245456,98979,12 / 02 / 2019,1545-878,5, «Тест 4»
То, что я хочу, чтобы конечный результат состоял в том, чтобы иметь возможность поместить вышеупомянутое в один класс как следующий
Как минимум, я использую filelpers для разбора файла csv, это будет работать нормально, если у меня есть файл заголовка sep и файл строки, но они объединены, как вы видите
var engine = new FileHelperEngine<CSVLines>();
var lines = engine.ReadFile(csvFileName);
Так что класс должен быть как ниже
[DelimitedRecord(",")]
public class SalesOrderHeader
{
private Guid? _guid;
public Guid RowID
{
get
{
return _guid ?? (_guid = Guid.NewGuid()).GetValueOrDefault();
}
}
public string DocReference { get; set; }
public string CardCode { get; set; }
public string DocDate { get; set; }
public string ItemCode { get; set; }
public string Description { get; set; }
public string Qty { get; set; }
public string Price { get; set; }
[FieldHidden]
public List<SalesOrderHeader> OrdersLines { get; set; }
}
Я предполагаю, что мне придется сделать два цикла, как вы увидите из моей процедуры заказа createales. Сначала я создаю заголовок, а затем добавляю строки.
public void CreateSalesOrder(List<SalesOrderHeader> _salesOrders)
{
foreach (var record in _salesOrders.GroupBy(g => g.DocReference))
{
// Init the Order object
oOrder = (SAPbobsCOM.Documents)company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oOrders);
SAPbobsCOM.SBObob oBob;
// set properties of the Order object
// oOrder.NumAtCard = record.Where(w=>w.RowID = record.Where()
oOrder.CardCode = record.First().CardCode;
oOrder.DocDueDate = DateTime.Now;
oOrder.DocDate =Convert.ToDateTime(record.First().DocDate);
foreach (var recordItems in _salesOrders.SelectMany(e=>e.OrdersLines).Where(w=>w.DocReference ==record.First().DocReference))
{
oOrder.Lines.ItemCode = recordItems.ItemCode;
oOrder.Lines.ItemDescription = recordItems.Description;
oOrder.Lines.Quantity = Convert.ToDouble(recordItems.Qty);
oOrder.Lines.Price = Convert.ToDouble(recordItems.Price);
oOrder.Lines.Add();
log.Debug(string.Format("Order Line added to sap Item Code={0}, Description={1},Qty={2}", recordItems.ItemCode, recordItems.Description, recordItems.Qty));
}
int lRetCode = oOrder.Add(); // Try to add the orer to the database
}
if(lRetCode == 0)
{
string body = "Purchase Order Imported into SAP";
}
if (lRetCode != 0)
{
int temp_int = lErrCode;
string temp_string = sErrMsg;
company.GetLastError(out temp_int, out temp_string);
if (lErrCode != -4006) // Incase adding an order failed
{
log.Error(string.Format("Error adding an order into sap ErrorCode {0},{1}", temp_int, temp_string));
}
}
}
Проблема, с которой вы столкнетесь, заключается в том, как сначала разбить CSV на два списка, а во-вторых, как правильно получить доступ к строкам заголовка в объекте со строгим шрифтом, как вы видите, я использую первый, который не будет работать правильно.