c# - 如何对从 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 }
]
},
...
]
}
我遵循的方法是:
首先,我尝试从一组数据中构建两组数据
- 原始结果集按以下方式分组
SalesOrderId
- 以上是与原文结合的
但加入失败……无法加入他们……
如何使用上述结果集和类从 Linq 构建这个 JSON 结构?
解决方案
好的,你需要的是源数据的正确分组。
allRecords.GroupBy(a=>a.CustomerId).Select(b=> new CustomerReport(b.Key){
SalesOrders = b.Values.GroupBy(c=>c.SaleOrderId).Select(d=> new SaleOrder(d.Key).........)}
不完整,但希望能给你一个提示
推荐阅读
- python - 在每行末尾添加逗号
- powershell - powershell 不等待命令完成?
- c# - 更改 Xamarin.Forms Material Visual 的颜色
- php - Laravel 8无法使用输入表单更改图像
- c - 如何在C中将字符转换为字符数组
- amazon-s3 - Minio:使用 docker-compose 添加公共存储桶
- javascript - NextJS:如何在自定义钩子中使用窗口?
- python - 如何在 pandas df 中获取日期时间的最大值和最小值?
- sql-server - 创建新的 gradle 项目
- woocommerce - 警告:在 wl_cart_table.php 中遇到一个非数字值