2

このアプリケーションでは、Datatables をすべてのデータ コンテナー コントロールの DataSource として使用しています。これらは Win Form Grid です。しかし今、DataTables から離れて、オブジェクト ベースの Generic .Net コレクションの使用を開始することにしました。移行の理由は、DevExpress コントロールを使用しており、オブジェクトのコレクションで実際に動作する Data Grid が提供する ServerMode オプションを利用したいからです。以下は Collections で実装する必要がある重要なことです:

  1. DataTable によって提供される主キー機能については、ジェネリック コレクションで同じものを維持するためのアプローチを理解する必要があります。
  2. DataTable.Merge 機能が必要です。Enumerable.Union を使用できることはわかっていますが、主キーとして機能するオブジェクトの少数のメンバーに基づいてコレクションにマージする効率的な方法が他にあるかどうかを尋ねたいと思います。
  3. DataRelations : コレクションで DataRelation のような機能を維持する方法。
  4. この移行で注意が必要なその他の制限または設計上の注意事項。

私はすでにDataTable をコレクションとして置換するための Best c# generics class? という質問を経験しましたか?

しかし、私の場合は十分ではなかったので、新しい質問をします。

参照用にいくつかのコード サンプル/KB 記事を提案または指摘してください。

更新#1:

この質問には、コレクションのキーベースのマージに関するいくつかの指針があります: キー c# に基づいて 2 つのリストをマージします。

しかし、GUI に表示するエンド コレクションで 500K 以上のレコードを見ているため、このアプローチのパフォーマンスについてはわかりません。

更新 #2:

Enumerable.Union は、私のシナリオでは役に立ちません。2 つのコレクションをマージするため、次のようになります。

私が持っている場合

List<Student> mainList 
List<Student> newList

どこ

Student.RollNo

使用します

IComparable on Student class comparing RollNo for two Student objects.

主キーである必要があります。マージは次のようになります。

  1. newList からのすべての新しい生徒は、mainList に追加する必要があります。
  2. Student が mainList と newList に既に存在する場合は、常に newList の Student をオーバーライドし、古いものを削除して新しいものを追加する必要があります。
  3. プロパティ属性または同様のものを使用して、いくつかのXML構成に基づいて動的に学生クラスのメンバーを主キーとして指定し、同じものを使用する方法はありますか?

    IComparable.Compare

これを達成する効率的な方法が他にある場合は、List.Find と List.Replace を避けたいと思います。

4

0 に答える 0