首页 > 解决方案 > 如何对从 LINQ 查询返回的 SQL Server 返回的同一结果集的结果进行分组和连接?

问题描述

我有以下数据结构

在此处输入图像描述

在客户报告中,有来自不同客户的多个订单,每个订单都有一对多的项目。当我执行我的存储过程时,它在结果集中返回的数据具有上述结构(注意:查询中有重复,因为一个订单有很多项目)。有一栏叫做ReportSequence这个是报告上记录的出现顺序。

public class CustomerReport
{
    public int CustomerId { get; set; }     //maps to the CustomerId column in SQL Query result
    public string FirstName { get; set; }   //maps to the FName column
    public string LastName { get; set; }    //maps to the LName column
    public DateTime? ReportDate { get; set; }  //Generated at object creation
    public List<SaleOrder> SalesOrders { get; set; }  //see SaleOrder class

    public CustomerReport()
    {
        SalesOrders = new List<SaleOrder>();
    }
}
public class SaleOrder
{
    public int? SaleOrderId { get; set; }       //maps to the SalesOrderId column in sql query result 
    public string SaleOrderNumber { get; set; }  // maps to SalesOrderNumber column

    public List<SalesOrderItem> OrderItems { get; set; }  //see SalesOrderItem class
    public int? SaleOrderTypeId { get; set; }     //maps to SalesOrderTypeId column
    public int? ReportSequenceNo { get; set; } //the sequence order 1,2,3... how each Sales Order appears on the report

    public SaleOrder()
    {
        OrderItems = new List<SalesOrderItem>();
    }
}
public class SalesOrderItem
{
    public int? ItemTypeId { get; set; }  //maps to ItemTypeId column in sql query result 
    public int? ItemId { get; set; }      // maps to ItemId column
    public string ItemName { get; set; }  //maps to ItemName column
}

使用查询执行返回的结果(显示在 Excel 屏幕截图上),我需要生成以下 JSON 结构:

    {
        "CustomerId" : "10001",
        "FirstName" : "Nicholas",
        "LastName" : "Cage",
        "ReportDate" : "toays date",
        SalesOrders: [
            { 
                SaleOrderId : 6 , 
                SaleOrderNumber : "EB100X100" ,
                SaleOrderTypeId : 102, 
                ReportSequenceNo : 1, 
                SalesOrderItems : [
                    { ItemTypeId : NULL, ItemId :  NULL, ItemName : Null }
                ]  
            },
            ...
        ]
    }

我遵循的方法是:

首先,我尝试从一组数据中构建两组数据

  1. 原始结果集按以下方式分组SalesOrderId
  2. 以上是与原文结合的

但加入失败……无法加入他们……

如何使用上述结果集和类从 Linq 构建这个 JSON 结构?

标签: c#linq

解决方案


好的,你需要的是源数据的正确分组。

allRecords.GroupBy(a=>a.CustomerId).Select(b=> new CustomerReport(b.Key){ 
SalesOrders = b.Values.GroupBy(c=>c.SaleOrderId).Select(d=> new SaleOrder(d.Key).........)}

不完整,但希望能给你一个提示


推荐阅读