使用Entity Framework Core将sqlite数据导出到csv

时间:2018-12-14 08:12:15

标签: c# sqlite entity-framework-core

我有一个简单的应用程序,它使用实体框架核心从sqlite获取数据,并且当然通过分页获取数据,因为其中包含大量数据。现在我想知道是否有一种简单的方法可以将其导出到csv。我可以使用与分页相同的方法(如果我将所有数据转储到内存中,我将退出内存异常)每页获取部分数据并将其添加到csv,并且我知道有一种直接导出数据的方法从sqlite使用:

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

我的实体框架方法如下:

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

有没有一种方法可以将其合并,因此我可以直接发送此请求,直接将数据库导出到csv。

1 个答案:

答案 0 :(得分:0)

您可以使用分页方法使用某种分页的导出代码,如下所示:

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