ChoETL csv阅读器可以将列读入ICollection字段吗?

ehxuflar  于 2023-03-21  发布在  其他
关注(0)|答案(1)|浏览(154)

我有一个包含订单详细信息的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,后者包含订单信息的其余部分。

mkshixfv

mkshixfv1#

感谢@Cinchoo的帮助;直接从ChoETL库的源代码!这是不可能开箱即用的。我最终使用了一个CsvOrder类来导入我的订单和一个OrderLine子类,然后我将它们转换为Order对象。

相关问题