C# Dapper:无法从dbf分析字符串(分析列时出错)

C# Dapper:无法从dbf分析字符串(分析列时出错),c#,dapper,dbf,C#,Dapper,Dbf,我想使用dapper查询dbf文件。在我的文件example.dbf中,我有两列: 值类型数字 名称类型字符 我写了一个例子 class ExampleDbf { public int Value { get; set; } public string Name { get; set; } } 现在我想写两个简单的查询 var listOne = connection.Query<ExampleDbf>("SELECT value FROM Example"); v

我想使用dapper查询dbf文件。在我的文件example.dbf中,我有两列:

  • 值类型数字
  • 名称类型字符
  • 我写了一个例子

    class ExampleDbf
    {
        public int Value { get; set; }
        public string Name { get; set; }
    }
    
    现在我想写两个简单的查询

    var listOne = connection.Query<ExampleDbf>("SELECT value FROM Example");
    var listTwo = connection.Query<ExampleDbf>("SELECT name, value FROM Example");
    
    当我使用标准DataReader时,我必须写类似的东西

    example.name = System.Text.Encoding.ASCII.GetString((byte[])reader["name"]).Trim();
    
    当然,我可以这样写:

    class ExampleDbf2
    {
        public int Value { get; set; }
        public byte[] Name { get; set; }
        public string StringName
        {
            get
            {
                return System.Text.Encoding.ASCII.GetString((byte[])Name ).Trim();
            }
        }
    }
    
    所以现在它起作用了

    var listTwo = connection.Query<ExampleDbf2>("SELECT name, value FROM Example");
    
    var listwo=connection.Query(“从示例中选择名称、值”);
    

    但是这个解决方案非常难看,可能有人有更好的解决方案。

    您可以始终返回一个动态,然后将其映射到您的对象,并在对象初始化期间执行转换操作

    var listTwo = connection.Query<dynamic>("SELECT name, value FROM Example")
        .Select(x => new ExampleDbf 
            { 
                Value = x.value,  
                Name = System.Text.Encoding.ASCII.GetString((byte[])x.name).Trim()
            }).ToList();
    
    var listwo=connection.Query(“从示例中选择名称、值”)
    .选择(x=>newexampledbf
    { 
    Value=x.Value,
    Name=System.Text.Encoding.ASCII.GetString((字节[])x.Name).Trim()
    }).ToList();
    
    数据库中的数据是字符数据;dapper永远不会代表你做
    编码
    决策:这个问题太不清楚了。。。如果需要,可以使用垫片属性。。。
    
    var listTwo = connection.Query<dynamic>("SELECT name, value FROM Example")
        .Select(x => new ExampleDbf 
            { 
                Value = x.value,  
                Name = System.Text.Encoding.ASCII.GetString((byte[])x.name).Trim()
            }).ToList();