【发布时间】:2013-12-10 09:16:16
【问题描述】:
我一直在从事一个项目,以解析 csv 文件中的条目列表并使用该数据更新数据库。
对于每个条目,我都会创建一个新的用户实例,并将其放入一个集合中。现在我想迭代该集合并将用户条目与数据库中的用户进行比较(如果存在)。我的问题是,如何将该用户(条目)对象与用户(db)对象进行比较,同时返回一个有差异的列表?
例如以下从数据库生成的类:
public class User
{
public int ID { get; set; }
public string EmployeeNumber { get; set; }
public string UserName { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public Nullable<int> OfficeID { get; set; }
public virtual Office Office { get; set; }
}
public class Office
{
public int ID { get; set; }
public string Code { get; set; }
public virtual ICollection<User> Users { get; set; }
}
为了将一些查询保存到数据库中,我只填写了我可以从 csv 文件中检索到的属性,因此 ID(例如)不可用于相等性检查。
有没有办法比较这些对象而不为每个属性定义规则并返回修改的属性列表?我知道这个问题似乎与之前的一些帖子相似。我已经阅读了很多,但由于我在编程方面相当缺乏经验,因此我很感激一些建议。
根据我所阅读的内容,我是否应该将“一般比较属性”与“使用数据注释忽略属性”和“返回比较结果列表”结合起来?
【问题讨论】:
-
为了更好地理解您的问题,如果您的 CSV 文件中没有 ID,您使用什么作为用户的唯一标识符?即您何时决定不创建新条目?
-
哦,对不起,我遗漏了一些属性以使示例稍微扁平化。我将编辑示例。唯一标识符是员工编号,这当然是决定是否在数据库中创建新用户所必需的。
-
是的,我有,但我想知道如何处理像 Office 这样的引用类型?我应该为这些类型实现 IEquatable 接口,以便我也可以在那里使用 equals 方法吗?
标签: c# object instance equality