[英]Dapper and CsvHelper ignore columns dynamically
我正在使用 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();
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.