List<int> list1= new List<int>{1,2,3,4};
List<int> list2 = new List<int>{1,2,3,4,5};
var test= list1.where(x=>x.Contains(list2)).ToList();
它对我不起作用。
我也不想使用Except()。
我该如何使用list2中的list1值
答案 0 :(得分:3)
您可以使用Intersect
void Main()
{
var list1 = new List<int> { 1, 2, 3, 4 };
var list2 = new List<int> { 1, 2, 3, 4, 5 };
var test = list1.Intersect(list2); //1.2.3.4
}
新问题:
那个好人。实际上我的要求是这样的....... var getdata = Data2 .Where(x => Data1.prop2.Contains(x.prop2)).Select(x => new {prop1 = x.prop1,prop3 = x.prop3}).ToList(); ...这里的data1.prop2和x.prop2都是List,并在第二行代码中到达x.prop2。错误是无法从System.Collections.Generic.List转换为long
例如
因为cotains参数是可枚举的,所以系统抛出错误。
您可以使用Intersect
和Any
来解决它。
演示代码:
void Main()
{
var Data2 = new[]{
new MyClass()
{
prop1 = "prop1",
prop2 = new List<long>() {1,2,3,4,5},
prop3 = "prop3"
}
};
var Data1 = new MyClass()
{
prop2 = new List<long>() { 1, 2, 3, 4, 5 },
};
var getdata = Data2.Where(x => Data1.prop2.Intersect(x.prop2).Any())
.Select(x => new { prop1= x.prop1, prop3 = x.prop3 }) .ToList();
;
}
class MyClass
{
public string prop1 { get; set; }
public List<long> prop2 { get; set; }
public string prop3 { get; set; }
}
答案 1 :(得分:1)
我认为您使用Where()
错了。如果您在整数列表上使用此方法,则您的x
为int
。 int
没有Contains
方法。你可以这样做
var test= list1.Where(x => list2.Contains(x)).ToList();