2012-03-21 39 views
2

我想計算和計數一定範圍內的C#數據表內的行數。C#DataTable計數在一個範圍內的行數

我想的行數(計數),其中在響應列中的值爲25和49之間。但是我不確定如何完成下面的代碼行。

我收到錯誤「操作數& &不能應用到類型‘串’和‘串’。我已經試過轉換語句的Int32,但它仍然不會編譯。 我怎樣才能正確地鍵入此?聲明

// Populate datatable from the database.  
answersDataTable = GetData.getIndividualQuestionResponsesOpenEndedAndRange(questionId); 

Int32 range25To49 = Convert.ToInt32(answersDataTable.Compute("COUNT(Response)", "Response > '75'" && "Response < '50'")); 

回答

3

DataTable中的過濾器語法邏輯&&簡直是"AND",所以將其更改爲:

Int32 range25To49 = 
Convert.ToInt32(answersDataTable.Compute("COUNT(Response)", 
             "Response > 75 AND Response < 50")); 

您收到的錯誤不言自明:您試圖在兩個字符串過濾器(即"Response > '75'""Response < '50'")之間應用邏輯&&,當然這是不可能的。

您必須創建一個包含兩個條件的過濾器,而不是像我之前的代碼片段中所示。

此外,數字周圍的單引號是沒有必要的(即使它似乎工作得很好)。

編輯:

如果Response列的類型不是數字而是一個字符串,可以使用例如Convert()功能:

Int32 range25To49 = 
Convert.ToInt32(
answersDataTable.Compute("COUNT(Response)", 
"Convert(Response,'System.Int32') > 75 AND Convert(Response,'System.Int32') < 50")); 
+0

代碼編譯,但似乎不被計數的任何值。應該是3.但它返回0. SQL Server數據庫中的列數據類型是NVarChar。這是問題嗎? – HGomez90 2012-03-21 17:04:09

+0

@Rupert:是的,它可能是...嘗試將數字包裝在轉換器中,例如'轉換(響應,'System.Int32')> 75' – digEmAll 2012-03-21 17:08:40

0
Int32 range25To49 = Convert.ToInt32(answersDataTable.Compute("COUNT(Response)", "Response > 75 AND Response < 50"));