You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PDFsharp生成发票时无法获取VehicleID对应明细数据

报错原因

你出现CS1061错误的根本原因是:groupedByVehicle是所有按VehicleID分组的集合,本身是IEnumerable<IGrouping<>>类型,没有Key属性,只有遍历出来的单个IGrouping对象(也就是你foreach里的vehicleGroup)才有Key属性。

你标注有疑问的var paidTrips = PaidTrips.ToList();是合理的,ObservableCollection本身是动态集合,转成List之后可以避免遍历过程中集合变动引发的异常,不需要删除。

修正后的完整代码

// PaidTrip = 我的实体类,已绑定到ObservableCollection (PaidTrips)
var paidTrips = PaidTrips.ToList(); 
// 按持证人ID分组,每个分组对应一个公司的所有行程
IEnumerable<IGrouping<string, PaidTrip>> tripsGroupedByCompany = paidTrips.GroupBy(pt => pt.LicenseHolderID);

foreach (var companyGroup in tripsGroupedByCompany) {
    // 创建PDF文档的逻辑写在这里,每个公司对应一个新文档
    // 先获取当前公司的基础信息、汇总金额
    string licenseHolderId = companyGroup.Key;
    decimal totalPayment = companyGroup.Sum(x => x.Payment);
    string licenseholderInvoiceID = companyGroup.Select(x => x.LicenseHolderInvoiceID).FirstOrDefault()?.ToString() ?? "";
    // 这里绘制公司抬头、汇总金额等公共信息
    gfx.DrawString($"持证人ID:{licenseHolderId} 总金额:{totalPayment:C}", /* 字体和颜色参数 */);
    
    // 公司内再按VehicleID分组,每个分组对应一个车辆的所有行程
    var groupedByVehicle = companyGroup.GroupBy(t => t.VehicleID);
    foreach (var vehicleGroup in groupedByVehicle) {
        // 这里的Key是vehicleGroup的,就是当前车辆的ID
        string vehicleId = vehicleGroup.Key;
        // 可以先计算当前车辆的汇总金额
        decimal vehicleTotal = vehicleGroup.Sum(x => x.Payment);
        // 绘制车辆抬头行
        gfx.DrawString($"车辆ID:{vehicleId} 车辆总金额:{vehicleTotal:C}", /* 字体和颜色参数 */);
        
        // 遍历当前车辆下的所有行程,绘制明细行
        foreach (PaidTrip trip in vehicleGroup) {
            // 这里可以取trip的任意字段,比如行程时间、出发地、金额等
            gfx.DrawString($"{trip.TripTime:yyyy-MM-dd} {trip.StartAddress} {trip.Payment:C}", /* 字体和颜色参数 */);
            // 每次绘制完一行记得调整Y轴坐标,避免文字重叠
        }
    }
    
    // 最后保存当前公司的PDF
    document.Save($"发票_{licenseHolderId}.pdf");
}

额外优化建议

  • 绘制明细行的时候建议预先计算每行的高度,每绘制一行就把Y坐标累加对应高度,避免文字重叠
  • 可以先把所有需要绘制的内容按结构整理成明细列表,再统一计算分页逻辑,避免内容超出PDF页面范围

内容的提问来源于stack exchange,提问作者Ole M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 13:09:03