gpt4 book ai didi

CsvHelper 创建一个 ClassMap ,其中包含一个属性作为列表项写入 csv 文件

转载 作者:行者123 更新时间:2023-12-04 10:58:27 25 4
gpt4 key购买 nike

上一些课:

Class A
{
public ClassC PropertyC {get;set; }
public List<ClassB> PropertyBs { get;set; }
}
Class B { public ClassE PropertyE {get;set; } }

Class C { public ClassD PropertyD {get;set; } }

已经创造出来了 :

稍后在某些基础结构类中使列初始化的包装器,而不是在 ctor 中
public abstract class WrapMap<T>: ClassMap<T>
{
public virtual void Configure(List<CsvColumnDefinition> columns) { }
}

public sealed class ClassAMap: WrapMap<ClassA>
{
public override void Configure(List<CsvColumnDefinition> columns)
{
var column = columns.FirstOrDefault.....
Map(m => m.PropertyC.PropertyD).MapColumn(column); // -- works fine ! MapColumn just do index and hide/show
Map(m = m.PropertyBs) ???? what should be here Reference ?
}
}

是否可以在不创建额外类的情况下为 PropertyBs 映射创建映射?我为 PropertyBs 创建了一个 ClassBMap 并尝试使用 Reference(m => m.PropertyBs) ,但似乎没有任何帮助。

我希望看到一些结果,如:
ClassC, ClassB.ClassE, ClassB.ClassD
L , N , H
L , G , J
S , Y , T

最佳答案

这可能与您要查找的内容相近。我不相信有任何方法可以通过单个 ClassMap 做您想做的事

public class Program
{
public static void Main(string[] args)
{
var records = new List<ClassA>
{
new ClassA {
PropertyC = new ClassC { Id = "L" },
PropertyBs = new List<ClassB> {
new ClassB {
PropertyD = "N",
PropertyE = "H" },
new ClassB {
PropertyD = "G",
PropertyE = "J"}
}
},
new ClassA {
PropertyC = new ClassC { Id = "S" },
PropertyBs = new List<ClassB> {
new ClassB {
PropertyD = "Y",
PropertyE = "T" }
}
}
};

using (var csv = new CsvWriter(Console.Out))
{
csv.Configuration.RegisterClassMap<ClassBMap>();
csv.Configuration.RegisterClassMap<ClassCMap>();

csv.WriteHeader<ClassC>();
csv.WriteHeader<ClassB>();
csv.NextRecord();

foreach (var record in records)
{
foreach (var item in record.PropertyBs)
{
csv.WriteRecord(record);
csv.WriteRecord(item);
csv.NextRecord();
}
}
}

Console.ReadKey();
}

}

public class ClassA
{
public ClassC PropertyC { get; set; }
public List<ClassB> PropertyBs { get; set; }
}

public class ClassB {
public string PropertyD { get; set; }
public string PropertyE { get; set; }
}

public class ClassC {
public string Id { get; set; }
}

public class ClassCMap : ClassMap<ClassC>
{
ClassCMap()
{
Map(m => m.Id).Name("ClassC");
}
}

public class ClassBMap : ClassMap<ClassB>
{
ClassBMap()
{
Map(m => m.PropertyD).Name("ClassB.PropertyD");
Map(m => m.PropertyE).Name("ClassB.PropertyE");
}
}

关于CsvHelper 创建一个 ClassMap<ClassA> ,其中包含一个属性作为列表项写入 csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59015885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com