使用 LINQ to CSV / Linq 查询导出到 csv

问题描述 投票:0回答:3

我在 linq 中有一个类可以像这样查询数据库表,问题是: 如何将该数据导出到 csv?我已经尝试过建议的链接,并且正在使用 LINQ to CSV 并且仍然想知道如何按顺序获取列?谢谢!

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 );
c# linq linq-to-entities
3个回答
3
投票

为了控制排序顺序,您必须定义一个具有如下属性的类

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

2
投票

LINQtoCSV 不会保留列顺序,除非您在所有属性上使用 [CsvColumn(FieldIndex = 1)] 属性。 但谁愿意这么做呢? 我会使用 ServiceStack.Text 库。 它默认保留列顺序。 工作原理如下:

字符串 csv = ServiceStack.Text.CsvSerializer.SerializeToCsv<>(exportData);


1
投票

既然您已经熟悉 LINQ,我之前就使用过 Matt Perdeck 的 LINQ2CSV ( http://www.codeproject.com/Articles/25133/LINQ-to-CSV-library ),它让我的生活受益匪浅更容易。

© www.soinside.com 2019 - 2024. All rights reserved.