2016-01-02 106 views
1

我有一个数据表中的数据集去如下:数据集转换

... 
<description>"abcd"</description> 
<date>"1/1/2001"</date> 
... 
<description>"1234"</description> 
<date>"1/1/2001"</date> 
... 
<description>"abcd"</description> 
<date>"1/1/2001"</date> 
... 

我想建立一个新的数据集,包含相同的值,行和列,但只有其中的描述“abcd”,本身。

即,因为我给的例子价值观,我想获得:

... 
<description>"abcd"</description> 
<date>"1/1/2001"</date> 
... 
<description>"abcd"</description> 
<date>"1/1/2001"</date> 
... 

我见过的DataTable.Select()方法,但我不知道这是否是一个很好的方式,也可以在工作所有为我想要做的。

做这种事情的最佳做法是什么?

+0

Select是不是DataSet的DataTable类的方法。你有没有尝试使用它,并有东西显示? – Steve

+0

@Steve是的,但没有意义。我试过在第一张桌上使用Select,并得到了乱码。我甚至不确定这是一种很好的方法来做我想做的事情 - 可能有一些克隆方法更好。 –

+0

如果你已经在内存中的表,然后选择是一种可行的方法来实现你的目标。但是,DataSet可以有多个表,并且您应该知道哪个表包含您的值,并应用Select,然后应用CopyToDataTable来提取行。顺便说一句,如果不工作,添加一些代码总是更好,因为它会为您的问题添加上下文 – Steve

回答

1

Select方法从它应用的DataTable中提取一个DataRow数组。

DataRow[] rows = ds.Tables[0].Select("description = 'abcd'"); 

具有行数组声明,你可以检查是否存在由Select方法返回的东西,并使用了IEnumerable扩展名为CopyToDataTable

DataTable foundData = null; 
if(rows != null) 
    foundData = rows.CopyToDataTable(); 

注意,DataSet是不是数组转换成一个DataTable参与这个过程,但它只是原始表的容器,而CopyToDataTable返回的新表不包含在DataSet的Tables集合中。

+1

非常感谢。 –