2012-02-16 124 views
5

我有一個linq類查詢db表,像這樣,問題是: 如何將數據導出到csv?我已經嘗試鏈接建議,我正在使用linq2csv,並仍然想知道如何獲得列的順序?謝謝!導出到csv - Linq查詢

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

爲了控制排序順序,必須定義與屬性的類象

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; } 
} 

然後你改變你的LINQ查詢使用這個類,如

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

我試過了,但我有日期和時間字段,不會接受它。我把它放在定義爲dateTime的類中,在sql中也是日期和時間。有任何想法嗎。最好的問候 – FAA 2012-02-20 22:15:59

+0

如果sql列允許null,那麼你可能需要使用DateTime?而不是DateTime。如果這沒有幫助,那麼你會得到什麼錯誤? – sgmoore 2012-02-21 09:13:38

+0

它們都是datetime。此外,錯誤是:DateTaken = u.DateTaken <--- connot implicity從datetime轉換爲datetime。謝謝 – FAA 2012-02-21 18:59:39

1

既然你已經熟悉了LINQ,我用馬特Perdeck的LINQ2CSV(http://www.codeproject.com/Articles/25133/LINQ-to-CSV-library)之前,它的使我的生活輕鬆了許多。

+0

我正在尋找一個用戶按下按鈕,然後提示將文件保存到他們的計算機。還有一個更簡單的方法來做到這一點。謝謝 – FAA 2012-02-16 05:51:25

+0

任何其他意見! – FAA 2012-02-16 18:32:07

+0

我已經使用Linq2csv並以此方式使用它(在第一篇文章中更新)。但是我得到的輸出爲csv,但列順序是隨機的。任何想法如何解決這個問題? – FAA 2012-02-16 23:13:28

1

LINQtoCSV不保留您的列順序,除非您在所有屬性上使用[CsvColumn(FieldIndex = 1)]屬性。但誰想這樣做?我會使用ServiceStack.Text庫。它默認保留列順序。這樣的工作:

string csv = ServiceStack.Text.CsxtSerializer.SerializeToCsv <>(exportData);