我有两个List<int>
说list1
和list2
。
现在我需要创建一个LINQ表达式,它应该以list1中每个项目的方式工作,如果它在list2中可用,则将其存储在list3中。例如,list1包含{5, 10, 15}
,list2包含{3, 5, 15, 20}
。然后在LINQ的帮助下,list3
应该包含{5,15}。我试过的是 -
list3 = list1.Where(t1 => list2.Any(t2 => t1.Contains(t2))).ToArray();
答案 0 :(得分:6)
list3 = list1.Intersect(list2).ToList();
答案 1 :(得分:1)
与其他答案一样,Intersect
对您来说是个不错的选择,但我想修复代码中的错误,实际上您应该在.Contains
中执行List2
操作不在List2
的元素中。还有一点需要注意的是,赋值操作的LHS属于List<int>
类型,因此您必须使用.ToList()
代替.ToArray()
。这意味着你必须这样写:
list3 = list1.Where(t1 => list2.Contains(t1)).ToList();
或类似的东西:
list3 = list1.Where(t1 => list2.Any(x=> x == t1)).ToList();
答案 2 :(得分:0)
list3 = (from p in list1 where list2.Contains(p) select p).ToList();