C# LINQ-获取列表2到列表3中存在的列表1的项

C# LINQ-获取列表2到列表3中存在的列表1的项,c#,linq,C#,Linq,我有两个List说list1和list2。 现在我需要创建一个LINQ表达式,它的工作方式应该是,对于列表1中的每个项,如果它在列表2中可用,那么将它存储在列表3中。例如,列表1包含{5,10,15},而列表2包含{3,5,15,20}。然后在LINQ的帮助下,list3应该包含{5,15}。我试过的是- list3 = list1.Where(t1 => list2.Any(t2 => t1.Contains(t2))).ToArray(); 正如其他答案所述,Intersect

我有两个
List
list1
list2
。 现在我需要创建一个LINQ表达式,它的工作方式应该是,对于列表1中的每个项,如果它在列表2中可用,那么将它存储在列表3中。例如,列表1包含
{5,10,15}
,而列表2包含
{3,5,15,20}
。然后在LINQ的帮助下,
list3
应该包含{5,15}。我试过的是-

list3 = list1.Where(t1 => list2.Any(t2 => t1.Contains(t2))).ToArray();

正如其他答案所述,
Intersect
对您来说是一个不错的选择,但我想修复代码中的错误,实际上您应该执行
。在
List2
中包含
操作,而不是在
List2
的元素中。您还需要注意的是,赋值操作的LHS类型为
List
,因此您必须使用
.ToList()
代替
.ToArray()
。这意味着你必须这样写:

list3 = list1.Where(t1 => list2.Contains(t1)).ToList();
或者像这样:

list3 = list1.Where(t1 => list2.Any(x=> x == t1)).ToList();

正如其他答案所述,
Intersect
对您来说是一个不错的选择,但我想修复代码中的错误,实际上您应该执行
。在
List2
中包含
操作,而不是在
List2
的元素中。您还需要注意的是,赋值操作的LHS类型为
List
,因此您必须使用
.ToList()
代替
.ToArray()
。这意味着你必须这样写:

list3 = list1.Where(t1 => list2.Contains(t1)).ToList();
或者像这样:

list3 = list1.Where(t1 => list2.Any(x=> x == t1)).ToList();

很好,您的情况出了什么问题?@un lucky-“int”不包含“Contains”的定义。
t1
是int,而不是列表。您的问题是需要使用
list1.Contains
而不是
t1.Contains
。好吧,您的情况出了什么问题?@un lucky-“int”不包含“Contains”的定义。
t1
是int,而不是列表。您的问题是需要使用
list1.Contains
而不是
t1.Contains