Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 两个列表由一个成员相交_C#_List_Linq - Fatal编程技术网

C# 两个列表由一个成员相交

C# 两个列表由一个成员相交,c#,list,linq,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 = Jona

我有一个这样的物体:

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});
List list1=新列表();
添加(新的myObject(){Name=Jason,ID=1});
添加(新的myObject(){Name=Jonathan,ID=2});
添加(新的myObject(){Name=Kevin,ID=3});
List list2=新列表();
添加(新的myObject(){Name=Jennifer,ID=5});
添加(新的myObject(){Name=Samantha,ID=2});
添加(新的myObject(){Name=Lucy,ID=9});

我想通过它们的
ID
s将这两个列表相交。我的意思是我想把乔纳森和萨曼莎的物品放在另一个列表中。我该怎么做?谢谢。

以加入
为例

var query = from o1 in list1 
            join o2 in list2 on o1.ID equals o2.ID
            select new { Object1 = o1, OBject2 = o2 };
我不知道你想要什么样的列表,因为你的类只有一个属性
ID

也许您需要一个
字典
,而该字典将公共ID作为键,并将对象作为值列出:

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

您可以通过
加入

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

活生生的例子:

人们不是来为你做工作的,尽管有些人似乎是,但在提问时,一定要弄清楚你想做什么。同样重要的是,通过将其作为问题本身的一部分来展示您已经尝试过的内容。如果你以后需要在文章中添加额外的信息,你可以随时添加。这种语法的可能副本有点过时了,不是吗?@Toshi一点也不,是什么让你这么想的?不管你喜欢这个还是方法语法(我的答案是ala),这只是一个偏好的问题。@Toshi即使是这样,为什么你不能编写“老派”代码?@Toshi:老派是用什么方式编写的?在连接时,我总是更喜欢查询语法而不是方法语法。但我从来没有听说过查询语法是老派的。它只是该语言提供的语法糖,使您能够编写更可读的代码。无论如何,它都会被转换为方法语法。如果必须使用查询synzax不支持的方法,可以将查询拆分为多个部分。这使得它更具可读性,而不会因延迟执行而导致性能损失。
select new{Object1=o1,OBject2=o2}这部分似乎错了。如何将o1和o2传递到另一个列表?谢谢