2012-02-16 87 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);