2015-04-22 69 views
5

我想使用dapper查询dbf文件。在我的文件example.dbf我有两列:Dapper:无法从dbf解析字符串(错误解析列)

  1. 值 - 类型NUMERIC
  2. 名称 - 类型CHARACTER

我写的类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都OK,但是当我执行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"); 

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

+0

来自DB的数据是字符数据;小巧玲珑从来不会为你做出编码决定:这个问题太不明了......如果你想要的话,你可以使用垫片属性...... –

回答

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