比较两个列表<int>而不使用Contains关键字

时间:2019-11-12 12:32:57

标签: linq

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值

2 个答案:

答案 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
}

enter image description here


新问题:

  

那个好人。实际上我的要求是这样的....... 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

例如

enter image description here

因为cotains参数是可枚举的,所以系统抛出错误。
您可以使用IntersectAny来解决它。

演示代码:

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; }
}

enter image description here

答案 1 :(得分:1)

我认为您使用Where()错了。如果您在整数列表上使用此方法,则您的xintint没有Contains方法。你可以这样做 var test= list1.Where(x => list2.Contains(x)).ToList();