我有两张清单,如图所示。我想要输出的是需要从列表2中删除列表1中不存在的状态,如下所示。感谢
答案 0 :(得分:2)
您可以使用Intersect方法
var list1 = new [] {1,2,4};
var list2 = new [] {1,2,3};
list1.Intersect(list2);
这将给出结果1,2
或者,如果您使用的是您创建的类,则需要创建一个比较器来告诉交叉方法什么等于什么。
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;
}
}
答案 1 :(得分:1)
for(int i=0;i<list2.Count;i++)
{
if(!list1.Select(p=>p.State).Contains(list2[i].State))
{
list2.RemoveAt(i);
}
}
或:
var improve_list2 = (from c in list2
where list1.Select(p=>p.State).Contains(c.State)
select c).ToArray();
答案 2 :(得分:1)
这是典型的内连接,因此您可以使用LINQ Join
方法:
var list3 = list2.Join(list1, x => x.State, y => y.State, (x, y) => x)
.ToList();