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
。