2

私はSqlDataReaderを使用して、次のように行ごとにデータテーブルに追加しています。

while (reader.Read())
{
    dataTable.LoadDataRow(reader.CurrentRow(), LoadOption.PreserveChanges);
}

これは機能しますが、dataTableに重複する行を追加しないようにする必要があります。dataTableのContainsメソッドまたはFindメソッドを使用できるようにしたいと思いますが、reader.CurrentRow()のobject []をDataRowに変換して、データテーブルに追加せずに比較する方法が見つかりません。

object []のハッシュセットを作成し、それらをすべて一度にデータテーブルに追加するオプションを検討しましたが、デフォルトのオブジェクトIEqualityComparerは参照のみを比較することを忘れました。

最後に重複を削除せずにこれを行うための実行可能な方法はありますか?

重複を削除することが唯一の方法である場合、それを行うための最良の方法は何ですか?

編集:データベースからの個別の行をコード内の個別のデータテーブルに分割しています。クエリ結果の各行区別されますが、各行のセクションは区別されません。残念ながら、クエリの結果はすでに異なるため、質問の内容を正確に実行する必要があります。

4

2 に答える 2

3

あなたは多くの詳細を提供しませんでしたが、これが包括的であることを願っています。

単一の列を一意にする必要がある場合は、データテーブルのColumnsコレクションで、次のように列を指定します。

 DataTable appeals = new DataTable("Appeals");
 appeals.Columns["PriorAppealNumber"].Unique = true;
 DataColumn keyField = new DataColumn("AppealNumber", typeof(string));
 appeals.Columns.Add(keyField);

一意性が複数の行にまたがる必要がある場合、これは次の方法です。

 var myUniqueConstraint = new UniqueConstraint( new DataColumn[] {appeals.Columns[0], appeals.Columns[1], appeals.Columns[2]} );
 appeals.Constraints.Add(myUniqueConstraint);

これにより、ソースデータベースにコミットする前に制約が適用されます。

于 2012-08-09T20:30:53.967 に答える
1

最も簡単な方法は、重複する行がまったくないことを実際に確認することです(リレーショナルデータベースの使用をクエリしている場合)。これDISTINCTにより、一意の行のみが返されます。

于 2012-08-09T20:20:13.053 に答える