【发布时间】:2022-11-03 23:12:09
【问题描述】:
我正在尝试使用 ClosedXML 将动态列表项导出到 Excel。目标是允许最终用户选择要导出的列。由于列是动态的,我使用 System.Linq.Dynamic.Core 命名空间的.ToDynamicListAsync()。 问题是,如果我创建匿名对象,excel 导出工作正常,但当我直接传递选择查询时抛出错误,如下所示。我直接通过 select cols bcoz cols 只会在运行时知道。
为了清楚起见,下面是代码快照
using ClosedXML.Excel;
using System.Linq.Dynamic.Core;
var filter = "MeetingNo = 85";
var query = context.PrmProjects.AsNoTracking().Where(filter);
var items = await query.Select(x => new
{
x.OrganizationId,
x.ProjectNo,
x.MeetingNo,
x.Name
}).ToDynamicListAsync();
using var wb = new XLWorkbook();
var ws = wb.Worksheets.Add();
ws.Cell(3, 1).InsertData(items); /// WORKS FINE
var selectQuery = $"new(OrganizationId,ProjectNo,MeetingNo,Name)";
var items1 = await query.Select(selectQuery).ToDynamicListAsync();
using var wb2 = new XLWorkbook();
var ws2 = wb2.Worksheets.Add();
ws2.Cell(3, 1).InsertData(items1); /// THROW ERROR 'Parameter count mismatch'
`
在上面的示例代码中,带有列表 'items' 的 InsertData 工作正常,但 'items1' 抛出错误 'Parameter count mismatch'
谁能帮帮我吗。我究竟做错了什么。
【问题讨论】:
-
难道是因为
MeetingNo可以为空? -
它不为空。
标签: excel export .net-6.0 closedxml dynamic-linq