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