首页 > 解决方案 > 根据不同类型的另一个列表中的项目查找一个列表中的项目

问题描述

我有一个List<Class1>and List<Class2>,我想从List<Class1>其中的项目 ID 存在的List<Class2>所有项目中获取所有项目,相反,从List<Class1>项目 ID存在的项目中获取所有项目List<Class2>

public class Class1
{
    public int Id { get; set; }
    public string AnotherId { get; set; }
    public decimal Price { get; set; }
}

public class Class2
{
    public int Id { get; set; }
    public int AnotherId { get; set; }
    public string Message { get; set; }
}

我尝试了几种解决方案,Contains但没有找到正确的方法。

标签: c#.netlinq

解决方案


你可以尝试这样的事情:

var result = list1.Where(x => list2.Any(y=>y.Id == x.Id))
                  .ToList();

即使两个列表都包含对相同类型对象的引用,Contains也不会开箱即用。如果是这种情况,您将要么IEquatable为您的类实现接口,要么覆盖两者EqualsGetHashCode方法。只有这样Contains才能按您的预期工作。


推荐阅读