尝试使用datatable.select获取不同的值

时间:2012-09-16 18:57:28

标签: c# xml winforms ado.net

我正在尝试从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]);
}

任何帮助..

2 个答案:

答案 0 :(得分:1)

您可以使用LINQ和GroupBy来区分。下面的示例代码假定您需要在列&#34; columnName&#34;中进行区分。使用string类型:

 var foundRows = dataTable.Select("...")
                  .GroupBy(row => row.Field<string>("columnName"), 
                           (key, group) => group.First())
                  .ToArray();

答案 1 :(得分: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(Row currentRow in distinctRows)
{
   cmbAgPr_Market.Items.Add(currentRow[1]);
}