C# 将两个列表合并为一个列表

C# 将两个列表合并为一个列表,c#,list,join,lambda,C#,List,Join,Lambda,我有两个不同表格中的两个列表;这些列表来自不同的数据库,我需要用两个列表(表)的结果连接或创建一个新列表,其中列表2中的值等于列表1中的值 表1ItemList 订单|物料|数量|描述|批次 表2ItemSell 订单|物料|数量|描述|批次 结果 订单|材料|库存|描述|批量|出售 我的代码是: result.AddRange( ItemList.Select(x=>x).Distinct() .Join( ItemSell.Distinct(), stock =>

我有两个不同表格中的两个列表;这些列表来自不同的数据库,我需要用两个列表(表)的结果连接或创建一个新列表,其中列表2中的值等于列表1中的值

表1
ItemList

订单|物料|数量|描述|批次 表2
ItemSell

订单|物料|数量|描述|批次 结果

订单|材料|库存|描述|批量|出售 我的代码是:

result.AddRange(
ItemList.Select(x=>x).Distinct()
.Join(
    ItemSell.Distinct(),
    stock => stock.Material.ToUpper().Trim(),
    sell => sell.Material.ToUpper().Trim(),
    (stock,sell) => newsellItems
    {
        Stock=stock.Quantity,
        sell=sell.Quantity,
        Desc=stock.Desc,
        Batch=stock.Batch,
        Material=stock.Material,
        Order=stock.Order
    }
    ).ToList()
);
用这个代码我只得到这些值

结果

订单|材料|库存|描述|批量|出售
你所拥有的应该有用。我在LINQPad中尝试了一个几乎相同的示例,得到了您期望的结果:

var stockItems = new[] 
{ 
    new { Order = 11, Material = "M1", Quantity = 1, Desc = "Description", Batch = "x1" }, 
    new { Order = 22, Material = "M3", Quantity = 2, Desc = "apple", Batch = "x2" }, 
    new { Order = 32, Material = "M1", Quantity = 10, Desc = "banana", Batch = "x3" },
    new { Order = 11, Material = "M5", Quantity = 30, Desc = "Description", Batch = "x4" },
};

var sellItems = new[]
{
    new { Order = 11, Material = "M1", Quantity = 12, Desc = "Description", Batch = "x1" }, 
    new { Order = 22, Material = "M3", Quantity = 21, Desc = "apple", Batch = "x2" }
};

stockItems
    .Distinct()
    .Join(
        sellItems.Distinct(), 
        stock => stock.Material.ToUpper().Trim(), 
        sell => sell.Material.ToUpper().Trim(), 
        (stock, sell) => new
        {
            Order = stock.Order,
            Material = stock.Material,
            Stock = stock.Quantity,
            Desc = stock.Desc,
            Batch = stock.Batch,
            Sell = sell.Quantity
        })
    .ToList()
    .Dump();
结果:

Order | Material | Stock | Desc        | Batch | Sell
11    | M1       | 1     | Description | x1    | 12 
22    | M3       | 2     | apple       | x2    | 21 
32    | M1       | 10    | banana      | x3    | 12

您的测试一定有问题,或者您没有完全粘贴您的代码

从您所显示的内容来看,第一个表中的Material列(即您要键入的内容)没有唯一的值。还有,最后一排是什么?“描述”是通用占位符吗?
result.AddRange(
ItemList.Select(x=>x).Distinct()
.Join(
    ItemSell.Distinct(),
    stock => stock.Material.ToUpper().Trim(),
    sell => sell.Material.ToUpper().Trim(),
    (stock,sell) => newsellItems
    {
        Stock=stock.Quantity,
        sell=sell.Quantity,
        Desc=stock.Desc,
        Batch=stock.Batch,
        Material=stock.Material,
        Order=stock.Order
    }
    ).ToList()
);
11| M1       | 11         |Description |x1    | 12
22| M3       | 2          |apple       |x2    | 21
var stockItems = new[] 
{ 
    new { Order = 11, Material = "M1", Quantity = 1, Desc = "Description", Batch = "x1" }, 
    new { Order = 22, Material = "M3", Quantity = 2, Desc = "apple", Batch = "x2" }, 
    new { Order = 32, Material = "M1", Quantity = 10, Desc = "banana", Batch = "x3" },
    new { Order = 11, Material = "M5", Quantity = 30, Desc = "Description", Batch = "x4" },
};

var sellItems = new[]
{
    new { Order = 11, Material = "M1", Quantity = 12, Desc = "Description", Batch = "x1" }, 
    new { Order = 22, Material = "M3", Quantity = 21, Desc = "apple", Batch = "x2" }
};

stockItems
    .Distinct()
    .Join(
        sellItems.Distinct(), 
        stock => stock.Material.ToUpper().Trim(), 
        sell => sell.Material.ToUpper().Trim(), 
        (stock, sell) => new
        {
            Order = stock.Order,
            Material = stock.Material,
            Stock = stock.Quantity,
            Desc = stock.Desc,
            Batch = stock.Batch,
            Sell = sell.Quantity
        })
    .ToList()
    .Dump();
Order | Material | Stock | Desc        | Batch | Sell
11    | M1       | 1     | Description | x1    | 12 
22    | M3       | 2     | apple       | x2    | 21 
32    | M1       | 10    | banana      | x3    | 12