gpt4 book ai didi

c# - 如何展平嵌套对象 (LINQ)

转载 作者:太空宇宙 更新时间:2023-11-03 15:14:43 25 4
gpt4 key购买 nike

我正在旧的 Winforms 网格上做一些工作,我有两个模型,我试图展平并分配给 DataGridView。

这是我的示例模型。

public class StockItem
{
public string StockName { get; set; }
public int Id { get; set; }
public List<Warehouse> Warehouses { get; set; }
}

public class Warehouse
{
public string WarehouseName { get; set; }
public int Id { get; set; }
}

数据的工作方式是必须首先创建一个仓库,然后将其分配给每个 StockItem。一个 StockItem 可能有所有仓库,也可能只有一个。

我需要展平数据,以便网格显示 StockName,然后是库存项目的所有关联仓库。

例子

StockCode1      Warehouse1   Warehouse2   Warehouse3
StockCode2 Warehouse1 Warehouse2
StockCode2 Warehouse1 Warehouse3

我已尝试通过 Linq 查询执行此操作,但只能为每个 StockItem\Warehouse 获取一条记录。

最佳答案

您可以通过创建一个 DataTable 来实现它,您可以轻松地将其用作 gridview 的源。首先添加所有列,然后为每个库存添加仓库:

var warehouseNames = 
stocks
.SelectMany(x => x.Warehouses.Select(y => y.WarehouseName)).Distinct();

var dt = new DataTable();
dt.Columns.Add("StockCode");

foreach (var name in warehouseNames)
{
dt.Columns.Add(name);
}

foreach (var stock in stocks)
{
var row = dt.NewRow();
row["StockCode"] = stock.Id;
foreach (var warehouse in stock.Warehouses)
{
row[warehouse.WarehouseName] = warehouse.Id;
}
dt.Rows.Add(row);
}

Warehouses

关于c# - 如何展平嵌套对象 (LINQ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39474489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com