如何解决Dapper 和 CsvHelper 动态忽略列
我正在使用 Dapper 查询我不知道返回列的 sql 过程。 我想用 CsvHelper 将结果写入 CSV 文件。 在运行时,我想动态忽略一些列。 CsvHelper 有一个映射配置,它只接受预定义的类。
var records = sqlCon.Query(sqlProcedure); //dynamic columns
using (var writer = new StreamWriter(@"file.csv"))
using (var csv = new CsvWriter(writer,CultureInfo.InvariantCulture))
{
var map = new CsvHelper.Configuration.DefaultClassMap<dynamic>();
...
csv.Context.RegisterClassMap(map);
csv.WriteRecords(records);
}
解决方法
我无法找到一种通过映射来实现的方法。可以手动写出它们并忽略某些列。
void Main()
{
dynamic obj1 = new ExpandoObject();
obj1.Id = 1;
obj1.Name = "Bill";
obj1.IgnoreProperty = "Please ignore me";
dynamic obj2 = new ExpandoObject();
obj2.Id = 2;
obj2.Name = "Brenda";
obj2.IgnoreProperty = "Please also ignore me";
var records = new List<dynamic>
{
obj1,obj2
};
//using (var writer = new StreamWriter("path\\to\\file.csv"))
using (var csv = new CsvWriter(Console.Out,CultureInfo.InvariantCulture))
{
var recordDictionary = (IDictionary<string,object>)records.First();
var properties = recordDictionary.Keys;
foreach (var property in properties)
{
if (property != "IgnoreProperty")
{
csv.WriteField(property);
}
}
csv.NextRecord();
foreach (var record in records)
{
var expanded = (IDictionary<string,object>)record;
foreach (var property in properties)
{
if (property != "IgnoreProperty")
{
csv.WriteField(expanded[property]);
}
}
csv.NextRecord();
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。