我的应用程序上下文中有两个,两者在原理图和图中都相同。结构,一个在远程服务器上,另一个是安装在计算机上的本地服务器。假设两个数据库相同但数据不同,我尝试做的是从两个上下文中获取所有数据以进行比较,因此我可以在两个数据库中拥有相同的数据。 使用Distinct扩展方法不起作用。 我的类叫做Users,它们的属性是:ID,Name,Last Name,User,Password。 ID字段是Identity Not null。 现在我在两个数据库中只有一个相同的记录,因此,使用Distinct不应该返回数据,但我返回了它们。我用GetHashCode方法检查了哈希,这些是不同的。 这是我的代码:
foreach (var item in remote.Users)
lstUsers.Add(item);
foreach (var item in local.Users)
lstUsers.Add(item);
var results = lstUsers.Distinct().ToList();
答案 0 :(得分:0)
您可以创建自己的业务对象类来保存用户信息。您的lstUsers将是此业务对象的列表,而不是数据库/ EF类型的列表。在此业务对象中,您可以覆盖Equals和GetHashCode,以便在考虑2个用户对象是否相同时仅比较您关心的信息。
private Business.User Transform(User user)
{
return new Business.User()
{
.Username = user.Username,
.Name = user.Name
}; //Etc; copy all fields you care about into your business object.
}
foreach (var item in remote.Users)
lstUsers.Add(this.Transform(item));
foreach (var item in local.Users)
lstUsers.Add(this.Transform(item));
var results = lstUsers.Distinct().ToList();
答案 1 :(得分:0)
您不能使用GetHashCode()的默认实现来判断两个对象是否具有相同的字段值。如果它们是不同的对象实例(它们是),GetHashCode()将为每个对象返回不同的值。
在任何情况下,由于每个数据库的ID都是Identity NOT NULL,因此对于相同的对象,ID可能不同。
根据您的具体需求,有一些选项可能会更好或更弱