2013-04-25 65 views
1

我的代碼:選擇多列從數據表

ProductRangesForNewRowsDt = ProductRangesDt.Select("PRODUCT_NAME, MIN_QUANTITY, MAX_QUANTITY, COMISSION_TEMPLATE where PROVIDER_ID = " + PROVIDER_ID).CopyToDataTable(); 

其中ProductRangesForNewRowsDtDataTableProductRangesDt是另一個DataTable包含這些列:

PRODUCT_ID 
PRODUCT_NAME 
PROVIDER_ID.PROVIDER_NAME 
MIN_QUANTITY 
MAX_QUANTITY 
COMISSION_TEMPLATE 

我收到此錯誤:

表達式中的語法錯誤。

+0

您可以使用LINQ爲此.. – 2013-04-25 10:10:14

+0

可以給我一個例子嗎? – Sora 2013-04-25 10:12:14

+0

@Sora請提供更詳細的代碼... – Virus 2013-04-25 10:13:54

回答

5

DataTable.Select返回DataRow陣列,使得提供在DataTable那麼你將返回所有列存在該行中的列反正。該.Select是一個WHERE子句中使用,所以你可以做這樣的事情:

DataRow[] rows = ProductRangesDt.Select("PROVIDER_ID = " + PROVIDER_ID); 

然後使用您想了解這些行到目標數據表的任何方法。

爲了得到你想要的列,你應該從數據表中派生出一個DataView,把它複製到另一個數據表並查詢這個新的集合。

DataView view = new DataView(ProductRangesDt); 
DataTable dtQueryTable = view.ToTable(false, new string[] { "PROVIDER_ID", "PRODUCT_NAME", "MIN_QUANTITY", "MAX_QUANTITY", "COMISSION_TEMPLATE" }); 

DataRow[] rows = dtQueryTable.Select("PROVIDER_ID = " + PROVIDER_ID); 

剛剛重新讀過這個,你也可以用另一種方式做。查詢你有什麼,做一個新的過濾設置的數據表,然後使用DataView提取你想要的列。

編輯

要獲得只有你想要的列,儘量上面沒有測試的其他方式

DataTable dtFiltered = ProductRangesDt.Select("PROVIDER_ID = " + PROVIDER_ID).CopyToDataTable(); 

DataView view = new DataView(dtFiltered); 
DataTable dtSpecificCols = view.ToTable(false, new string[] { "PRODUCT_NAME", "MIN_QUANTITY", "MAX_QUANTITY", "COMISSION_TEMPLATE" }); 

,它只是一個快速射擊答覆。

+0

這不是我想要的,因爲你的代碼返回一行與ProductRangesDt的所有列我不希望我只是想指定的列不是所有的 – Sora 2013-04-25 10:16:04

+0

@sora檢查編輯,雖然我個人認爲你需要重新看看你如何努力實現這一目標。 – 2013-04-25 10:21:54

+0

我想知道你做了什麼,但仍然不是我想要的代碼行中仍然包含PROVIDER_ID,並且我不想要那 – Sora 2013-04-25 10:27:07