【问题标题】:Dapper and CsvHelper ignore columns dynamicallyDapper 和 CsvHelper 动态忽略列
【发布时间】:2021-05-07 08:46:50
【问题描述】:

我正在使用 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);
}

【问题讨论】:

标签: c# dapper csvhelper


【解决方案1】:

我想不出一种方法来使用映射。可以手动将它们写出并忽略某些列。

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();
        }       
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    相关资源
    最近更新 更多