在我们的应用程序中,我们一直使用数据表作为所有数据容器控件的数据源。这些是 Win Form Grid。但现在我们决定放弃 DataTables 并开始使用基于对象的 Generic .Net 集合。转移的原因是,我们使用 DevExpress 控件,我们想利用 Data Grid 提供的 ServerMode 选项,它实际上适用于对象集合。以下是我们需要在 Collections 中实现的重要内容:
- DataTable 提供的 Primary Key 特性,我们需要弄清楚在 Generic Collections 中保持相同的方法。
- DataTable.Merge 功能是必需的,我知道 Enumerable.Union 可以使用,但想问是否有任何其他有效的方法可以基于作为主键的对象中的少数成员合并到集合。
- DataRelations:如何在 Collections 中维护 DataRelation 类型的功能。
- 在此转变中我们需要注意的任何其他限制或设计注意事项。
我已经完成了将 DataTable 替换为集合的最佳 c# 泛型类的问题?
但这对我的情况来说还不够,所以提出了一个新问题。
请建议或指向我一些代码示例/知识库文章以供参考。
更新#1:
这个问题有一些关于基于键的集合合并的指针: Merge two list with based on key c#
但我不确定这种方法的性能,因为我正在查看最终集合中的 500K+ 记录以显示在 GUI 上。
更新#2:
Enumerable.Union 在我的场景中不会有用。因为通过合并两个集合,我的意思是:
如果我有
List<Student> mainList
List<Student> newList
在哪里
Student.RollNo
将使用
IComparable on Student class comparing RollNo for two Student objects.
应该是主键。合并结果应为:
- newList 中的所有新学生都应添加到 mainList。
- 如果一个 Student 已经存在于 mainList 和 newList 中,那么 newList 中的 Student 应该总是被覆盖,旧的应该被删除,新的应该被添加。
有没有办法根据一些 XML 配置,使用属性属性或类似的东西动态地将学生类中的任何成员指定为主键,并在以下位置使用相同的:
IComparable.Compare
如果有任何其他有效的方法可以实现这一点,我想避免使用 List.Find 和 List.Replace。