使用linq比较两个列表

使用linq比较两个列表,linq,list,Linq,List,我有两个清单,如图所示。我想要输出的是需要从列表2中删除列表1中不存在的状态,如下所示。谢谢 for(int i=0;i<list2.Count;i++) { if(!list1.Select(p=>p.State).Contains(list2[i].State)) { list2.RemoveAt(i); } } 您可以使用Intersect方法 var list1 = new [] {1,2,4}; var list2 = new []

我有两个清单,如图所示。我想要输出的是需要从列表2中删除列表1中不存在的状态,如下所示。谢谢

for(int i=0;i<list2.Count;i++)
{
    if(!list1.Select(p=>p.State).Contains(list2[i].State))
    {
        list2.RemoveAt(i);
    }
}

您可以使用Intersect方法

var list1 = new [] {1,2,4};
var list2 = new [] {1,2,3};
list1.Intersect(list2);
这将得到结果1,2

或者,如果使用创建的类,则需要创建一个比较器来告诉intersect方法什么等于什么

        var productList1 = new List<Product>();
        productList1.Add(new Product { Code = 1, Name = "Pears" });
        productList1.Add(new Product { Code = 2, Name = "Rasbries" });
        productList1.Add(new Product { Code = 3, Name = "Apple" });

        var productList2 = new List<Product>();
        productList2.Add(new Product { Code = 1, Name = "Pears" });
        productList2.Add(new Product { Code = 2, Name = "Rassbeyreys" });
        productList2.Add(new Product { Code = 4, Name = "Avocado" });

        var result = productList1.Intersect(productList2, new ProductComparer());


public class ProductComparer : IEqualityComparer<Product>
{
    public bool Equals(Product x, Product y)
    {
        return x.Code == y.Code;
    }

    public int GetHashCode(Product obj)
    {
        return obj.Code;
    }
}
var productList1=new List();
Add(新产品{Code=1,Name=“Pears”});
productList1.Add(新产品{Code=2,Name=“Rasbries”});
productList1.Add(新产品{Code=3,Name=“Apple”});
var productList2=新列表();
productList2.Add(新产品{Code=1,Name=“Pears”});
productList2.Add(新产品{Code=2,Name=“Rassbeyreys”});
productList2.Add(新产品{Code=4,Name=“Avocado”});
var result=productList1.Intersect(productList2,new ProductComparer());
公共类产品比较程序:IEqualityComparer
{
公共布尔等于(乘积x,乘积y)
{
返回x.代码==y.代码;
}
public int GetHashCode(产品对象)
{
返回目标代码;
}
}

这是典型的内部联接,因此可以使用LINQ
联接方法:

var list3 = list2.Join(list1, x => x.State, y => y.State, (x, y) => x)
                 .ToList();

当你喜欢画画的时候,StackOverflow并不是为了“给我写代码做这个和那个”。@Konrad Kokosa:对不起,我是linq的初学者,所以我不知道。thatsy正在寻求帮助如果您认为这是答案,请选择:-)
var list3 = list2.Join(list1, x => x.State, y => y.State, (x, y) => x)
                 .ToList();