entity-framework - 如何从 LINQ 构建 EF Core 查询,然后将查询传递给要执行的后台作业
问题描述
如何从 LINQ 构建查询,然后发送到后台作业以执行?我正在使用带有 Hangfire 的 EF Core 作为我的后台作业管理器。我尝试传入一个 IQueryable 但 Hangfire 无法序列化它。
我有多个可以以 csv 格式导出的表。用户可以在导出前应用过滤器和排序。
目前 Export 方法构建查询,执行它,然后将列表转换为 csv 供用户下载。这是代码片段:
public async Task Export(GetAllVitaminDataInput input)
{
var query = CreateFilteredQuery(input);
query = ApplySorting(query, input);
var entities = await AsyncQueryableExecuter.ToListAsync(query);
//map to dto
var dtos = ObjectMapper.Map<List<ExportVitaminDataDto>>(entities);
//create csv file and store on file server
var zipFileName = _exportManager.ExportToFile(dtos.Cast<object>().ToList(), "FilePrefix");
}
我想将这段代码移至后台作业。所以它编译查询,然后将它作为参数传递给后台作业,然后它将在后面运行导出作业。
public async Task ExportBackground(GetAllVitaminDataInput input)
{
var query = CreateFilteredQuery(input);
var args = new ExportVitaminDataArgs();
args.Query = ApplySorting(query, input);
_backgroundJobManager.Enqueue<ExportFieldDataJob, ExportVitaminDataArgs>(args);
}
我想传递编译查询的一个原因是因为我想让导出后台作业更通用,以便它可以被另一个其他表使用,只需接收一个查询,然后我将传递对象以映射到,然后生成 CSV。
此外,在将其传递给后台作业之前,我无法将其枚举到列表中,因为当记录数很大时它会变得非常慢。
所以我的问题是,我如何传入查询,以便它可以被后台作业使用,执行,然后检索要导出到 csv 的数据?
解决方案
推荐阅读
- linq - Dynamic Linq——表和属性名称的字符串
- python - 如何通过简单的鼠标选择和 Ctrl+C 将 PyQT5 QTableWidget 整个表格中的条目复制到剪贴板?
- java - 确认用户时出现越界异常
- go - Golang WriteHeaderAndJson 返回错误的结果
- google-app-engine - 在部署 GAE flex 应用程序时诊断错误
- css - 移动设备上的平滑关键帧动画?
- python - 如何在 Python 中使用带有条件 while 循环的 Schedule 模块
- python - 当变量值不匹配时如何阻止python运行某些'if'代码
- javascript - 如何在事件处理程序中执行 map() 函数
- python - 如何使用 Python 检查虚拟机是否正在运行