我有一个包含订单详细信息的csv文件。每个订单有一行,但在我的代码中,这将转换为一个带有ICollection<OrderLine> Lines
属性的Order
对象。我需要将每个订单读入一个Order
对象,并将订单行信息作为一个项目添加到Lines
集合中。
我将发送一个列Map字典供读者使用。
_orderMapping = new Dictionary<string, string>
{
{"Customer", "CustomerName"},
{"Model Number", "Lines.ElementAt(0).ModelNumber"},
{"Ship Date", "ShipDate"},
{"Quantity", "Lines.ElementAt(0).Quantity"},
{"Warehouse", "Lines.ElementAt(0).WarehouseName"}
};
下面是我如何设置ChoCSVRecordConfiguration
:
var config = new ChoCSVRecordConfiguration<T>()
.WithFirstLineHeader()
.Configure(c => c.ThrowAndStopOnMissingField = false)
.Configure(c => c.IgnoreEmptyLine = true)
.Configure(c => c.FileHeaderConfiguration.IgnoreColumnsWithEmptyHeader = true);
foreach (var header in headers)
{
if (mapping.TryGetValue(header, out var propName))
config.Map(propName, header);
}
其中mapping
是我的Map字典,headers
是csv工作表标题。我尝试使用Lines[0]
和Lines.ElementAt(0)
,但Lines
仍然为空。有办法做到这一点吗?
示例csv:
订单对象编码:
public class Order : OrderWithoutLines
{
public ICollection<OrderLine> Lines { get; set; }
}
public class OrderLine
{
public string Id { get; set; }
public int ParentId { get; set; }
public string OrderNumber { get; set; }
public int ModelId { get; set; }
public string ModelNumber { get; set; }
public string CustomerItemNumber { get; set; }
public int Quantity { get; set; }
public int WarehouseId { get; set; }
public string WarehouseName { get; set; }
public decimal? Price { get; set; }
public string Status { get; set; }
public string State { get; set; }
public string FulfilledByPO { get; set; }
}
Order继承自OrderWithoutLines,后者包含订单信息的其余部分。
1条答案
按热度按时间mkshixfv1#
感谢@Cinchoo的帮助;直接从ChoETL库的源代码!这是不可能开箱即用的。我最终使用了一个
CsvOrder
类来导入我的订单和一个OrderLine
子类,然后我将它们转换为Order
对象。