0

ストア プロシージャを使用して結果を取得し、結果を入力する Datatable を作成します。そこから、結果が ListBox に入力されます。ID が重複しているため、重複した結果を削除したいと考えています。

private DataTable _dt = new DataTable();

ListBox1.DataSource = _dt;
ListBox1.DataValueField = "userId"; //column name in DT
ListBox1.DataBind();
4

3 に答える 3

2
DataTable distinctTable = originalTable.DefaultView.ToTable( /*distinct*/ true);
ListBox1.DataSource = distinctTable ;
ListBox1.DataValueField = "userId";
ListBox1.DataBind();

http://msdn.microsoft.com/en-us/library/wec2b2e6.aspx

于 2012-05-23T16:26:00.723 に答える
2

linq を使用する場合は、次を使用できます。

var source = _dt.Distinct();

ListBox1.DataSource = source;
ListBox1.DataValueField = "userId";
ListBox1.DataBind();

編集: わかりました、もう少し詳しく調査したところ、System.Data.DataRowCollectionは などの典型的な IEnumerable と同じ方法で IEnumerable 拡張メソッドを実装していないことがわかりましたList。拡張メソッドを使用するには、Distinct()最初に行セットをより基本的な IEnumerable に取得する必要があります。

IEnumerable<System.Data.DataRow> rows = (IEnumerable<System.Data.DataRow>)_dt.Rows;
ListBox1.DataSource = rows.Distinct();
ListBox1.DataValueField = "userId";
ListBox1.DataBind();

機能しますが、@ Massimiliano が提供する回答ほど単純でも効率的でもない可能性があります。

于 2012-05-23T16:20:35.507 に答える
1

ジョエルの答えはあなたの場合にうまくいくと思います。DISTINCTただし、ストアド プロシージャで使用することにより、そもそも重複を返さないようにすることをお勧めします。このようにして、あなたまたは他の誰かが同じデータを再び必要とする場合、どこからでも重複を除外する必要はありません。さらに、データベースと Web サーバー間のネットワークを介して不要なデータを送信しないという副次的な利点もあります。

于 2012-05-23T16:27:20.123 に答える