导出到csv - Linq查询
问题描述:
我有一个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);
答
为了控制排序顺序,必须定义与属性的类象
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);
答
既然你已经熟悉了LINQ,我用马特Perdeck的LINQ2CSV(http://www.codeproject.com/Articles/25133/LINQ-to-CSV-library)之前,它的使我的生活轻松了许多。
答
LINQtoCSV不保留您的列顺序,除非您在所有属性上使用[CsvColumn(FieldIndex = 1)]属性。但谁想这样做?我会使用ServiceStack.Text库。它默认保留列顺序。这样的工作:
string csv = ServiceStack.Text.CsxtSerializer.SerializeToCsv <>(exportData);
我试过了,但我有日期和时间字段,不会接受它。我把它放在定义为dateTime的类中,在sql中也是日期和时间。有任何想法吗。最好的问候 – FAA 2012-02-20 22:15:59
如果sql列允许null,那么你可能需要使用DateTime?而不是DateTime。如果这没有帮助,那么你会得到什么错误? – sgmoore 2012-02-21 09:13:38
它们都是datetime。此外,错误是:DateTaken = u.DateTaken FAA 2012-02-21 18:59:39