C# 如何在c中合并来自不同列表的2个对象?
我在c中有以下两个Item对象列表:C# 如何在c中合并来自不同列表的2个对象?,c#,linq,C#,Linq,我在c中有以下两个Item对象列表: public class Item { public int Id { get; set; } public List<string> Orders { get; set; } } List<Item> items1 = new List<Item>() { new Item() { Id = 1, Code = 23, Orders = new List<string>() {
public class Item
{
public int Id { get; set; }
public List<string> Orders { get; set; }
}
List<Item> items1 = new List<Item>() {
new Item() { Id = 1, Code = 23, Orders = new List<string>() { "A", "B" }},
new Item() { Id = 2, Code = 24, Orders = new List<string>() { "C", "D" }}
};
List<Item> items2 = new List<Item>() {
new Item() { Id = 1, Code = 23, Orders = new List<string>() { "E", "F" }},
new Item() { Id = 2, Code = 24, Orders = new List<string>() { "G", "H" }}
};
我想合并Id和代码相同的两个列表中的项目对象,因此上述两个列表的输出应该是具有以下条目的单个列表:
{
new Item() { Id = 1, Code = 23, Orders = new List<string>() { 'A', 'B', 'E', 'F' },
new Item() { Id = 2, Code = 24, Orders = new List<string>() { 'C', 'D', 'G', 'H' }
};
如何使用linq在c中实现这一点?您可以加入这两个列表,然后合并它们的顺序,如: 您将获得:
如果您需要连接订单,则可以使用Concat替换Union。因此,如果您的订单包含A、B和A、F,那么使用concat,您将得到A、B、A、F,使用Union,您将得到A、B、F,但不重复,在前面的问题中,只有1个列表,而在这个问题中,列表是2。然后,您的问题变成如何将两个不同列表中的项目合并到一个列表中,你刚才的问题回答了这个问题。我相信你能想出如何用两个集合中的项创建一个新的列表/枚举,如果没有,谷歌可以告诉你如何创建。使用linq语法也可以做到这一点吗?@user1740381 linq不是语法,它是System.linq命名空间中的方法集合。也许你指的是方法语法,答案是肯定的,所有的查询语法表达式都被翻译成方法语法;如果你愿意,你可以自己翻译。
List<Item> combined = (from t in items1
join r in items2 on new { t.Id, t.Code } equals new { r.Id, r.Code }
select new Item
{
Id = t.Id,
Code = t.Code,
Orders = t.Orders.Union(r.Orders).ToList()
}).ToList();
var result = from x in items1
join y in items2 on x.Id equals y.Id
select new Item
{
Id = x.Id,
Code = x.Code,
Orders = x.Orders.Concat(y.Orders).ToList()
};