Dapper:无法解析dbf中的字符串(解析列时出错)

时间:2015-04-22 20:43:08

标签: c# dapper dbf

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

  1. 值 - 键入NUMERIC
  2. 名称 - 类型CHARACTER
  3. 我写了类ExampleDbf

    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");
    

    ListOne没问题,但是当我执行listTwo时,我有以下System.Data.DataException:

    Additional information: Error parsing column 0 (name=System.Byte[] - Object)
    

    当我使用标准的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");
    

    但这个解决方案非常难看,也许有人有更好的解决方案。

1 个答案:

答案 0 :(得分:6)

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

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