【发布时间】:2016-12-08 04:41:48
【问题描述】:
我需要比较两个列表,其中包含同一类的对象,但不是每个属性都应该用于检查差异。例如。不应使用 Id(主键)属性。
我的示例类:
class MyClass
{
public System.Nullable<int> Id { get; set; }
public int VMId { get; set; }
public string Name { get; set; }
}
var oldR = new List<MyClass>();
oldR.Add(new MyClass() { Id = 1, VMId = 11, Name = "Test1" });
oldR.Add(new MyClass() { Id = 2, VMId = 22, Name = "Test2" });
oldR.Add(new MyClass() { Id = 3, VMId = 33, Name = "Test3" });
oldR.Add(new MyClass() { Id = 4, VMId = 44, Name = "Test4" });
oldR.Add(new MyClass() { Id = 5, VMId = 55, Name = "Test5" });
var newR = new List<MyClass>();
newR.Add(new MyClass() { Id = null, VMId = 22, Name = "Test2" });
newR.Add(new MyClass() { Id = null, VMId = 33, Name = "Test3" });
newR.Add(new MyClass() { Id = null, VMId = 44, Name = "Test43" });
newR.Add(new MyClass() { Id = null, VMId = 55, Name = "Test5" });
newR.Add(new MyClass() { Id = null, VMId = 66, Name = "Test6" });
我想对上述内容做的是匹配 VMId 属性上的两个列表。接下来我想检查一下 Name 属性是否从 oldR 变成了 newR。
基本上我现在想,应该从数据库中删除 Test1,应该添加 Test6,并且应该将 Test4 更新为 Test43。
希望它有意义
编辑: 我应该提一下,我真正的班级有+20个属性。我想现在如何使用 linq 进行比较,而不指定它们?也许只是排除我不想比较的 Id 属性
我怎样才能做到这一点?
【问题讨论】:
-
尝试 linq 查询。这可以帮助您轻松比较对象
-
我应该提到我的真实班级有+20个属性。我想现在如何使用 linq 进行比较,而不指定它们?也许只是排除我不想比较的 Id 属性
-
我会使用左外连接来组合列表 VMID。见 msdn:code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b