我正在旧的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; }
}


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

我需要展平数据,以便网格显示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);
}

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

09-27 23:41