C# 如何找出两种列表模型之间的差异

C# 如何找出两种列表模型之间的差异,c#,list,linq,C#,List,Linq,面临比较两个模型列表的问题 public class Relations { [key] public int Id { get; set; } public int CounterpartyId { get; set; } public int CounterpartyTypeId { get; set; } public int DebTypeId { get; set; } } 我有一个方法,

面临比较两个模型列表的问题

public class Relations
    {
        [key]
        public int Id { get; set; }
        public int CounterpartyId { get; set; }
        public int CounterpartyTypeId { get; set; }
        public int DebTypeId { get; set; }
    }
我有一个方法,从前端获取该模型的列表,并从数据库中获取该列表。当模型来自前端时,它并没有id,我不向该模型添加id。 例如:

            var models = new List<Relations>()
            {
                new Relations
                {
                    CounterpartyId = 1,
                    CounterpartyTypeId = 1,
                    DebTypeId = 1
                },
                new Relations
                {
                    CounterpartyId = 1,
                    CounterpartyTypeId = 2,
                    DebTypeId = 1001
                }
            };

            var entity = new List<Relations>()
            {
                new Relations
                {
                    CounterpartyId = 1,
                    CounterpartyTypeId = 1,
                    DebTypeId = 1
                },
                
            };

但它们是相同的,无法找到数据库中不存在的数据

正如Peter Smith在评论部分所建议的,您可以创建:


您可以添加一个自定义比较器;看见您可以使用它来确定类中哪些字段构成匹配项。
IEnumerable<Relations> toInsert = models.Except<Relations>(entity);
var test=(from m in models select m).Except(entity).ToList();
sealed class MyComparer : IEqualityComparer<Relations>
{
    public bool Equals(Relations x, Relations y)
    {
        if (x == null)
            return y == null;
        else if (y == null)
            return false;
        else
            return x.CounterpartyId == y.CounterpartyId  && x.CounterpartyTypeId == y.CounterpartyTypeId && x.DebTypeId == y.DebTypeId ;
    }

    public int GetHashCode(Relations obj)
    {
        return obj.Id.GetHashCode();
    }
}
IEnumerable<Relations> toInsert = models.Except<Relations>(entity, new MyComparer());