【发布时间】:2014-04-21 15:20:34
【问题描述】:
我在 vb.net 工作。我有两个用户定义类的通用列表 - 我们称这个类为学生。
我正在调用一个数据库,该数据库为我提供了一个数据集,我将其整理到一个通用的学生列表中。学生将拥有以下属性:名字、姓氏、电话、地址等。
然后我向一个外国网络 API 发出调用,我将数据安排回另一个通用学生列表 - 同一个班级。
现在我正在尝试一对一比较,如果数据库方面与我在调用 web api 时得到的有任何差异。有没有一种简单的方法可以将这样的类的通用列表与另一个对象进行比较?我无法确定项目的顺序,因此无法进行直接比较 - 但除了遍历通用列表并在其他通用列表中搜索匹配项之外,我是否还有其他明显的方法遗漏。
让我们打电话给他们...DatabaseList 和 APIList
有以下几种可能:
- 存在于数据库中,但不存在于 API 中
- 存在于 API 但不存在于数据库中
- 两者都存在但两者之间不匹配
我希望最终得到三个新列表,以便我可以采取适当的行动。现在我能做到这一点的唯一方法是遍历列表,这似乎是个坏主意 - 必须有更好的方法。
【问题讨论】:
-
学生类可以包含一个(或两个)属性来存储状态和结果,而不是制作 3 个相同数据的列表。结果可能可以使用 LINQ 进行计算。
-
当然...跟踪项目的任何一种方式都很好,但问题更多的是如何找到这些项目而不是如何跟踪它们。如果我们要比较一个通用的字符串列表,它是一个简单的 .contains() 或 indexof() 但是因为类中有很多属性,我试图避免一个巨大的循环。
-
这两个数据源肯定有一个像 StudentID 这样的公共键吗?如果是这样,请使用字典快速确定 webStudent 记录是否匹配或在带有
ContainsKey的 localDBList 中。如果没有,请将其添加为 WebOnly 状态。是的,您正在循环,但只有一次将所有三种可能性作为结果代码放入一个列表中。然后 LINQ 可以返回匹配这个或那个状态/结果的学生(或 ID 列表)。
标签: vb.net compare generic-list