0

xml ファイルからデータを取得し、datatable.Select() を使用してフィルター処理して、コンボボックスに値を追加しようとしています。

しかし、値が重複しているため、DISTINCT ソートを適用する必要があります。dt1.DefaultView.ToTable を試しましたが、うまくいきませんでした。コンボボックスにも重複するアイテムを追加しています。以下は私が使用しているコードスニペットです:

DataTable dt1 = XMLCategory.ds.Tables["AgencyInfo"];

DataRow[] foundRows;
foundRows = dt1.Select("AgencyRegion='" + cmbAgPr_Region.Text + "'");
DataTable dt2 = dt1.DefaultView.ToTable(true, "AgencyMarket");
for (int i = 0; i < foundRows.Length; i++)
{
    cmbAgPr_Market.Items.Add(foundRows[i][1]);
}

どんな助け..

4

2 に答える 2

1

LINQ を使用しGroupByて区別することができます。string以下のサンプル コードは、列 "columnName" を次の型で区別する必要があることを前提としています。

 var foundRows = dataTable.Select("...")
                  .GroupBy(row => row.Field<string>("columnName"), 
                           (key, group) => group.First())
                  .ToArray();
于 2012-09-17T06:37:33.513 に答える
0

編集:マイナーな間抜けが修正されました。

リストボックスには、dt1 ではなく dt2 の行を入力する必要があります。ToTable は dt2 に戻りますが、foundRows は dt1 から取得されます。次のように、これで問題が解決するはずです。

DataRow[] distinctRows = dt2.Select();
for (int i=0; i < distinctRows.Length; i++)
{
   cmbAgPr_Market.Items.Add(distinctRows[i][1]); 
}

完全を期すために、別の構文として、distinctRows の行に対して foreach を実行できます。

foreach(Row currentRow in distinctRows)
{
   cmbAgPr_Market.Items.Add(currentRow[1]);
}
于 2012-09-16T19:16:06.000 に答える