gpt4 book ai didi

c# - CsvHelper,编写动态变量名(c#)

转载 作者:太空宇宙 更新时间:2023-11-03 12:11:55 25 4
gpt4 key购买 nike

假设要以以下 csv 文件格式写入银行用户帐户详细信息。

AccountId, Name, Jan, Feb, Mar ........... Dec
1, Anne, 1000.00, 400.00, 500.00 .......... 200.00
2, John, 900.00, 400.00, 500.00 .......... 1200.00
3, Brit, 600.00, 400.00, 500.00 .......... 2200.00

为了表示上述数据结构,我有以下模型类:

class AccountBalance {
int ID { get; set; };
string Name { get; set; };
List<string> lastTwelveMonths { get; set; };
}

我的代码是写csv是:

using (var stream = new MemoryStream())
using (var streamWriter = new StreamWriter(stream))
using (var stringWriter = new StringWriter())
using (var csvWriter = new CsvWriter(stringWriter))
{
csvWriter.WriteRecords(listOfAccountBalances);
streamWriter.Write(stringWriter.GetStringBuilder());
streamWriter.Flush();
stream.Position = 0;
return stream.ToArray();
}

但是当涉及到 lastTwelveMonths 列表时,上面的代码不会给出准确的输出。有人可以帮忙吗?

最佳答案

您应该能够使用自定义类映射来执行此操作:

sealed class AccountBalanceMap : ClassMap<AccountBalance>
{
public AccountBalanceMap()
{
Map(x => x.ID);
Map(x => x.Name);
Map(x => x.lastTwelveMonths, false)
.Name("Jan")
.ConvertUsing(row => $"{row.lastTwelveMonths[0]}");
Map(x => x.lastTwelveMonths, false)
.Name("Feb")
.ConvertUsing(row => $"{row.lastTwelveMonths[1]}");
// ...
}

在使用之前用 CsvWriter 注册类映射:

csv.Configuration.RegisterClassMap<AccountBalanceMap>();

您甚至可以使用 DateTimeFormatInfo.CurrentInfo.GetMonthName 动态构建类映射

sealed class AccountBalanceMap : ClassMap<AccountBalance>
{
public AccountBalanceMap()
{
Map(x => x.ID);
Map(x => x.Name);
for (int i = 0; i < 12; i++)
{
var monthName = DateTimeFormatInfo.CurrentInfo.GetMonthName(i + 1);
var monthIndex = i;
Map(x => x.lastTwelveMonths, false)
.Name(monthName)
.ConvertUsing((row) => $"{row.lastTwelveMonths[monthIndex]}");
}
}
}

关于c# - CsvHelper,编写动态变量名(c#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51779506/

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