我有一个简单的应用程序,它使用实体框架核心从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。
答案 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)
}