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

如何在LINQ与EF Core中按CustomerId全量分组Task和Report表?

解决方案:按CustomerId全量分组Task和Report并生成GroupedItems结果

1. 定义统一DTO

由于Task和Report结构不同,需要先创建一个通用DTO来承载两类数据,确保能放入同一个集合中:

public class ReportTaskDTO
{
    public int? TaskId { get; set; }
    public string? Description { get; set; }
    public int? ReportId { get; set; }
    public string? Summary { get; set; }
    public int CustomerId { get; set; }
    // 标识条目类型,方便后续区分Task/Report
    public string ItemType { get; set; }
}

2. 转换并合并数据源

将Task和Report表的数据转换为DTO,再合并成全量集合(保留所有记录,不会丢失无匹配的CustomerId):

// 假设tasks是从数据库获取的IEnumerable<Task>,reports是IEnumerable<Report>
var taskDtos = tasks.Select(t => new ReportTaskDTO
{
    TaskId = t.TaskId,
    Description = t.Description,
    CustomerId = t.CustomerId,
    ItemType = "Task"
});

var reportDtos = reports.Select(r => new ReportTaskDTO
{
    ReportId = r.ReportId,
    Summary = r.Summary,
    CustomerId = r.CustomerId,
    ItemType = "Report"
});

// 合并两个DTO集合,得到所有Task和Report的全量记录
var combinedDtos = taskDtos.Concat(reportDtos);

3. 分组生成目标结果

按CustomerId分组,并组装成你需要的GroupedItems<ReportTaskDTO>类型:

var groupedResult = combinedDtos
    .GroupBy(dto => dto.CustomerId)
    .Select(group => new GroupedItems<ReportTaskDTO>
    {
        GroupName = $"CustomerId: {group.Key}",
        GroupCount = group.Count(), // 组内Task+Report的总数量
        Items = group.ToList()
    })
    .OrderBy(g => g.GroupKey) // 按CustomerId升序排序,匹配期望的分组顺序
    .ToList();

4. (可选)输出为你展示的文本格式

如果需要将结果打印成示例中的格式,可以遍历分组结果:

int groupIndex = 1;
foreach (var group in groupedResult)
{
    Console.WriteLine($"**分组{groupIndex}: {group.GroupName} 计数({group.GroupCount})**");
    foreach (var item in group.Items)
    {
        Console.WriteLine(item.ItemType == "Task" 
            ? $"TaskId {item.TaskId}" 
            : $"ReportId {item.ReportId}");
    }
    Console.WriteLine("--------------------------------------");
    groupIndex++;
}

内容的提问来源于stack exchange,提问作者Maryam Afzal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:46:05