.net 关于用泛型集合(C&x2B;Winforms)替换数据表的设计方法的建议

.net 关于用泛型集合(C&x2B;Winforms)替换数据表的设计方法的建议,.net,c#-4.0,generics,datatable,devexpress,.net,C# 4.0,Generics,Datatable,Devexpress,在我们的应用程序中,我们一直使用Datatables作为所有数据容器控件的数据源。这些是赢形式的网格。但现在我们已经决定不再使用数据表,而是开始使用基于对象的通用.Net集合。转换的原因是,我们使用DevExpress控件,我们希望利用数据网格提供的ServerMode选项,它实际上可以用于对象的收集。以下是我们需要在集合中实施的重要事项: DataTable提供的主键特性,我们需要找出在泛型集合中维护相同特性的方法 DataTable.Merge功能是必需的,我知道Enumerable.Uni

在我们的应用程序中,我们一直使用Datatables作为所有数据容器控件的数据源。这些是赢形式的网格。但现在我们已经决定不再使用数据表,而是开始使用基于对象的通用.Net集合。转换的原因是,我们使用DevExpress控件,我们希望利用数据网格提供的ServerMode选项,它实际上可以用于对象的收集。以下是我们需要在集合中实施的重要事项:

  • DataTable提供的主键特性,我们需要找出在泛型集合中维护相同特性的方法
  • DataTable.Merge功能是必需的,我知道Enumerable.Union是可以使用的,但我想问,是否有其他有效的方法可以基于充当主键的对象中的少数成员合并到集合中
  • DataRelations:如何在集合中维护DataRelations类型的功能
  • 本次换班中我们需要注意的任何其他限制或设计注意事项
  • 我已经讨论过这个问题了

    但这对我的情况来说还不够,所以提出了一个新问题

    请向我推荐或指向一些代码示例/KB文章以供参考

    更新#1:

    此问题为基于键的集合合并提供了一些指导:

    但我不确定这种方法的性能,因为我正在查看要在GUI上显示的最终集合中的500K+记录

    更新#2:

    Enumerable.Union在我的场景中不会有用。因为通过合并两个集合,我的意思是:

    如果我有

    List<Student> mainList 
    List<Student> newList
    
    将使用

    IComparable on Student class comparing RollNo for two Student objects.
    
    应该是主键。合并结果应为:

  • 所有来自newList的新学员都应添加到mainList
  • 如果一个学生已经在mainList和newList中,那么总是来自newList的学生应该被覆盖,旧的学生应该被删除,新的学生应该被添加
  • 是否有任何方法可以基于某些XML配置,使用属性或类似的内容,动态地将Student类中的任何成员指定为主键,并在以下情况下使用相同的主键:

    i可比较。比较

  • 如果有其他有效的方法,我想避免使用List.Find和List.Replace

    IComparable on Student class comparing RollNo for two Student objects.