2015-04-22 5 views
5

मैं dbf फ़ाइलों पर क्वेरी करने के लिए डैपर का उपयोग करना चाहता हूं। मेरी फाइल example.dbf में मैं दो कॉलम है:डैपर: डीबीएफ से स्ट्रिंग पार्स करने में सक्षम नहीं है (कॉलम पार्स करने में त्रुटि)

  1. मूल्य - प्रकार NUMERIC
  2. नाम - तरह का पात्र

मैं लिखने के वर्ग 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"); 

लेकिन यह समाधान बहुत बदसूरत है, शायद किसी के पास बेहतर समाधान हो सकता है।

+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(); 
संबंधित मुद्दे