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());