複数の列に並べ替えを行ってDataViewを作成すると、FindRowsを使用するときにすべての列の値を指定する必要があります。動的レベルのソートキーを持つ汎用の階層型DataViewクラス
例、私が持っている場合:
dv1 = new DataView(tbl1, null, "Col1, Col2, Col3", DataViewRowState.CurrentRows);
私はFindRowsを使用した場合、すべての3つの列の値を指定することを強制しています。
Col1の特定の値とCol2とCol3の「任意の」値のすべての行を取得することはできません。
これはSortedListで可能です。ここでは、SortedListをネストすることができます。したがって、最上位のSortedListは、Col1としてキーを持ち、別のSortedListとして値を持ちます。 2番目のレベルのSortedListは、Col2としてキーを持ち、別のSortedListとして値を持ちます。最後に、3番目のレベルのSortedListは、Col3としてのキーと、DataRowsへの参照を持ちます。そのようなSortedListのを使用
、同様に、メソッドを記述することが可能である:キー配列が1つのだけのキーが含まれている場合、コードは1番目レベルSortedListのから2番目のレベルのSortedListのを見つけることができる
public DataRowView[] FindAny(object[] keys)
2番目と3番目のレベルのSortedListをループし、すべての行を1番目のキーに属するように戻します。
私の質問は誰もすでに、動的な数のキーを取り、任意のDataTable/DataRowで動作するSortedListクラスを作成しているかどうかです。
注: 1.この質問はプレゼンテーションレイヤとは関係ありません。私は、データ処理のためのヘルパークラスを探しています。たとえば、複数のExcelシートで大量のデータを分析する場合などです。 2.私は現在LINQベースのソリューションを探していません。私は将来LINQに移行します。
ありがとうございました。
あなたが注目している場合は、 'System.Linq.Dynamic'(Nugetライブラリー)は、今手元に –
をこの問題を解決することができ、あなたは私の今後の参考のためにLINQのコードを投稿することができますPLS。 – AllSolutions
DataViewの 'RowFilter'プロパティを使用してフィルタリングを行うソリューションを確認してください –