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 withGroupBy来获得不同。下面的示例代码假设您需要在“columnName”列中区分string类型:

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

编辑:小错误已修复。

您应该使用 dt2 中的行填充列表框,而不是 dt1。您的 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 回答