2016-01-02 101 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

非常感謝。 –