Экспорт в CSV - Linq запрос - PullRequest
       3

Экспорт в CSV - Linq запрос

5 голосов
/ 16 февраля 2012

У меня есть класс в linq, который запрашивает таблицу БД, как этот, и вопрос: Как мне экспортировать эти данные в 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 );

Ответы [ 3 ]

2 голосов
/ 18 февраля 2012

Для управления порядком сортировки необходимо определить класс с атрибутами, такими как

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 );
1 голос
/ 27 мая 2015

LINQtoCSV не сохраняет ваш порядок столбцов, если вы не используете атрибут [CsvColumn (FieldIndex = 1)] во всех ваших свойствах.Но кто хочет это сделать?Я бы использовал библиотеку ServiceStack.Text.Сохраняет порядок столбцов по умолчанию.Работает так:

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

1 голос
/ 16 февраля 2012

Поскольку вы уже знакомы с LINQ, я уже использовал LINQ2CSV Мэтта Пердека (http://www.codeproject.com/Articles/25133/LINQ-to-CSV-library) и это сделало мою жизнь намного проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...