Экспорт данных sqlite в csv с помощью Entity Framework Core - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть простое приложение, которое получает данные из sqlite, используя ядро ​​Entity Framework, и, конечно, с помощью нумерации страниц, потому что данных много.Теперь мне было интересно, есть ли простой способ экспортировать его в CSV.Я мог бы использовать тот же метод, что и для разбивки на страницы (если я буду выгружать все данные в память, я получу исключение из памяти), получить часть данных на страницу и добавить ее в CSV, и я знаю, что есть способ экспортировать данные напрямуюиз sqlite, используя:

>sqlite3 c:/sqlite/chinook.db
sqlite> .headers on
sqlite> .mode csv
sqlite> .output data.csv

Мой метод инфраструктуры Entity выглядит следующим образом:

    public IEnumerable<Event> PaginationOrderedGet(int currentPage, int pageSize)
    {
        using (var ctx = new DataContext())
        {
            //Add something to export to csv
            IQueryable<Event> query = ctx.Events.Where(e => e.CorrectEntry && !e.DuplicatedEntry);
            IQueryable<Event> paginationQuery = query.OrderBy(orderBy).Skip((currentPage - 1) * pageSize).Take(pageSize);
            return paginationQuery.AsNoTracking().ToList();
        }
    }

Есть ли способ объединить его, чтобы я мог просто отправить этот запрос напрямую сделать DB для экспорта в CSV.

1 Ответ

0 голосов
/ 14 декабря 2018

Вы можете использовать какой-то постраничный код экспорта, используя ваш метод нумерации страниц, что-то вроде этого:

int currentPage = 1;
int pageSize = 1000;


var data = PaginationOrderedGet(currentPage, pageSize)
while(data.Count() != 0) {
   foreach(var item in data){
       File.AppendAllText(@"C:\path\to\file.csv", GetItemAsCsv(item) + Environment.NewLine);
   }
   currentPage++;
   data = PaginationOrderedGet(currentPage, pageSize)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...