一个成员交叉两个列表

时间:2017-05-17 10:20:49

标签: c# list linq

我有一个这样的对象:

public class myObject
{
public string Name {get; set;}
public string ID {get; set;}
}

我有两个这样的列表

List<myObject> list1 = new List<myObject>();
list1.Add(new myObject(){Name = Jason, ID = 1});
list1.Add(new myObject(){Name = Jonathan, ID = 2});
list1.Add(new myObject(){Name = Kevin, ID = 3});

List<myObject> list2 = new List<myObject>();
list2.Add(new myObject(){Name = Jennifer, ID = 5});
list2.Add(new myObject(){Name = Samantha, ID = 2});
list2.Add(new myObject(){Name = Lucy, ID = 9});

我希望通过ID与这两个列表相交。我的意思是我想把Jonathan和Samantha的对象放在另一个列表中。我怎样才能做到这一点?感谢。

2 个答案:

答案 0 :(得分:4)

Join为例

var query = from o1 in list1 
            join o2 in list2 on o1.ID equals o2.ID
            select new { Object1 = o1, OBject2 = o2 };

我不知道您想要哪种列表,因为您的类只有一个属性ID

也许你想要一个Dictionary<int, List<myObject>>,字典有公共ID作为键,一个列表将对象作为值:

Dictionary<int, List<myObject>> result = list1.Concat(list2)
    .GroupBy(x => x.ID)
    .ToDictionary(g => g.Key, g => g.ToList());

答案 1 :(得分:4)

您可以使用Join

执行此操作
var result = list1.Join(list2, l1 => l1.ID, l2 => l2.ID, 
    (lhs,rhs) => new {ID = lhs.ID, Name1 = lhs.Name, Name2 = rhs.Name};
);

实例:http://rextester.com/OAJRG62251