繁体   English   中英

导出到csv - Linq查询

[英]Export to csv - Linq query

我在linq中有一个查询db表的类,问题是:如何将该数据导出到csv? 我已经尝试了链接建议,我正在使用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 );

为了控制排序顺序,您必须定义具有类似属性的类

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

除非在所有属性上使用[CsvColumn(FieldIndex = 1)]属性,否则LINQtoCSV不会保留列顺序。 但是谁想这样做? 我会使用ServiceStack.Text库。 它默认保留列顺序。 像这样工作:

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

由于你已经熟悉LINQ,我之前使用过Matt Perdeck的LINQ2CSV( http://www.codeproject.com/Articles/25133/LINQ-to-CSV-library ),这让我的生活变得更加轻松。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM