2012-02-16 17 views
5

मेरे पास linq में एक वर्ग है जो इस तरह की क्वेरी डीबी तालिका है, और सवाल यह है: मैं उस डेटा को सीएसवी में कैसे निर्यात करूं? मैंने सुझाए गए लिंक का प्रयास किया है और मैं linq2csv का उपयोग कर रहा हूं और अभी भी जानना चाहता हूं कि उनके आदेश से कॉलम कैसे प्राप्त करें? धन्यवाद!सीएसवी में निर्यात करें - लिंक क्वेरी

var usr = from usr in db.User 
select new { usr.UserName, usr.Dept, usr.Name) 
MainListView.DataSource = usr; 
MainListView.DataBind(); 

CsvFileDescription outputFileDescription = new CsvFileDescription 
       { 
        SeparatorChar = ',', 
        FirstLineHasColumnNames = true, 
        FileCultureName = "en-US" 
       }; 

       CsvContext cc = new CsvContext(); 
       string finalPath = mypath + "usr_" + DateTime.Now.ToString ("yyyyMMddhhmmssfff") + ".csv"; 
       cc.Write(usr, finalPath, outputFileDescription); 

उत्तर

2

आदेश सॉर्ट क्रम आप इस वर्ग का उपयोग करने के तो फिर आप अपने LINQ क्वेरी को परिवर्तित करने की तरह

public class User 
{ 
    [CsvColumn(FieldIndex = 1)] 
    public string UserName { get; set; } 

    [CsvColumn(FieldIndex = 2)] 
    public string Dept { get; set; } 

    [CsvColumn(FieldIndex = 3)] 
    public string Name { get; set; } 
} 

विशेषताओं के साथ एक वर्ग को परिभाषित करना होगा नियंत्रित करने के लिए, जैसे

string mypath = @".\"; 

var usr = (from u in db.User select new User 
       { 
        UserName = u.UserName, 
        Dept  = u.Dept , 
        Name  = u.Name 
       } 
     ); 

CsvFileDescription outputFileDescription = new CsvFileDescription 
    { 
     SeparatorChar = ',', 
     FirstLineHasColumnNames = true, 
     FileCultureName = "en-US" 
    }; 

CsvContext cc = new CsvContext(); 
string finalPath = mypath + "usr_" + DateTime.Now.ToString("yyyyMMddhhmmssfff") + ".csv"; 
cc.Write(usr, finalPath, outputFileDescription); 
+0

मैंने कोशिश की, लेकिन मेरे पास दिनांक और समय क्षेत्र है जो इसे स्वीकार नहीं करेगा। मेरे पास डेटटाइम के रूप में परिभाषित कक्षा में है और एसक्यूएल में तिथि और समय भी है। कोई विचार। सबसे अच्छा – FAA

+0

यदि एसक्यूएल कॉलम नल की अनुमति देता है तो आपको डेटटाइम का उपयोग करने की आवश्यकता हो सकती है? डेटटाइम के बजाए। अगर इससे मदद नहीं मिलती है, तो आपको क्या त्रुटि मिलती है? – sgmoore

+0

यह दोनों पर डेटाटाइम है। इसके अलावा त्रुटि यह है: डेटटेकन = u.DateTaken <--- connot implicity डेटाटाइम से डेटाटाइम में कनवर्ट करें। धन्यवाद – FAA

1

के बाद से आप पहले से ही LINQ से परिचित हैं, मैंने पहले मैट Perdeck के LINQ2CSV (http://www.codeproject.com/Articles/25133/LINQ-to-CSV-library) का उपयोग किया है और यह मेरे जीवन बहुत आसान बना दिया है।

+0

मुझे एक बटन दिखाना है जहां उपयोगकर्ता उस पर दबाएगा, फिर यह फ़ाइल को उनके कंप्यूटर पर सहेजने के लिए संकेत देगा। ऐसा करने का एक आसान तरीका भी है। धन्यवाद – FAA

+0

कोई अन्य टिप्पणी! – FAA

+0

मैंने उस लिंक 2csv का उपयोग किया है और इसे इस तरह इस्तेमाल किया है (जैसा कि पहले पोस्ट पर अपडेट किया गया है)। लेकिन मुझे आउटपुट सीएसवी मिल जाता है लेकिन कॉलम ऑर्डर यादृच्छिक है। इसे ठीक करने के बारे में कोई विचार? – FAA

1

LINQtoCSV की रक्षा नहीं करता है आपका कॉलम ऑर्डर जब तक कि आप अपने सभी गुणों पर [CsvColumn (FieldIndex = 1)] विशेषता का उपयोग न करें। लेकिन कौन ऐसा करना चाहता है? मैं ServiceStack.Text लाइब्रेरी का उपयोग करूंगा। यह डिफ़ॉल्ट रूप से कॉलम ऑर्डर को सुरक्षित रखता है। इस तरह काम करता है:

स्ट्रिंग सीएसवी = सर्विसस्टैक.Text.CsvSerializer.SerializeToCsv <> (exportData);

संबंधित मुद्दे