[英]how to convert the entire content of a DataTable column to a delimited string in C#?
我正在使用SqlDataAdapter和DataSet從MSSQL服務器檢索數據。 從那個DataSet我創建了一個DataTable。 我的目標是將表的每一列轉換為字符串,其中元素以逗號分隔。 我想我會在分隔符工作之前先嘗試字符串轉換。
代碼在ASP.Net頁面的代碼隱藏中運行。 最終的目標是將字符串傳遞給jscript變量,這是一個“功能需求”,我從列創建一個分隔的字符串,並且它必須最終作為jscript變量。
這是我到目前為止所擁有的:
DataSet myDataSet = new DataSet();
mySqlDataAdapter.Fill(myDataSet);
DataTable temperature = myDataSet.Tables["Table"];
// LOOP1
foreach (DataRow row in temperature.Rows)
// this loop works fine and outputs all elements
// of the table to the web page, this is just to
// test things out
{
foreach (DataColumn col in temperature.Columns)
{
Response.Write(row[col] + " ### ");
}
Response.Write("<br>");
}
// LOOP2
foreach (DataColumn column in temperature.Columns)
// this loop was meant to take all elements for each
// column and create a string, then output that string
{
Response.Write(column.ToString() + "<br>");
}
在LOOP1中,一切正常。 我的數據有4列,所有列都適當地呈現在網頁上每行一條記錄。
我在http://msdn.microsoft.com/en-us/library/system.data.datacolumn.tostring.aspx上看到了LOOP2的代碼,這似乎完全符合我的需要,除了它實際上並沒有我想做的事情。
LOOP2唯一能做的就是在網頁上寫4行。 每行都有相應表列的標題,但沒有其他數據。 顯然,我有一個邏輯缺陷,或者我誤解了DataColumn和.toString是如何工作的。 請幫我解決這個問題。 提前致謝。
編輯:這是一個SQL查詢結果示例,這就是表的樣子: 表格問題結果@ ImageShack
我想要結束的是四個字符串,這是從第二列創建的字符串的示例:“ - 6.7,-7,-7.2,-7.3,-7.3”。
此代碼將使用", "
將每列下的單元格的值連接起來:
foreach (var column in temperature.Columns)
{
DataColumn dc = column as DataColumn;
string s = string.Join(", ", temperature.Rows.OfType<DataRow>()
.Select(r => r[dc]));
// do whatever you need with s now
}
例如,對於DataTable定義為:
DataTable table = new DataTable();
table.Columns.Add(new DataColumn("Column #1"));
table.Columns.Add(new DataColumn("Column #2"));
table.Rows.Add(1, 2);
table.Rows.Add(11, 22);
table.Rows.Add(111, 222);
......它會產生"1, 11, 111"
和"2, 22, 222"
字符串。
編輯: 我看到你選擇將列聲明為var而不是DataColumn,這是個人偏好/風格的問題還是編碼存在問題?
考慮以下場景(在與上面相同的數據表示例中):
// we decide we'll use results later, storing them temporarily here
List<IEnumerable<string>> columnsValues = new List<IEnumerable<string>>();
foreach (DataColumn column in temperature.Columns)
{
var values = temperature.Rows.OfType<DataRow>()
.Select(r => r[column].ToString())
columnsValues.Add(values);
}
我們假設我們現在得到了列值列表的列表。 所以,當我們打印它們時,像這樣:
foreach (var lisOfValues in columnsValues)
{
foreach (var value in listOfValues)
{
Debug.Write(value + " ");
}
Debug.WriteLine("");
}
我們預計會看到1 11 111
然后是2 22 222
。 對?
錯了 。
此代碼將兩次輸出2 22 222
。 為什么? 我們的.Select(r => r[column].ToString())
捕獲 column
變量 - 不是它的值,而是變量本身 - 因為我們不立即使用它,一旦我們離開循環,我們所知道的是最后一個 column
值。
要了解有關此概念的更多信息,請搜索閉包和捕獲的變量 - 例如,在此類帖子中。
摘要 :
在這種情況下,您可以在foreach
語句中使用DataColumn
。 這沒關系,因為我們在循環內部通過我們的.Select(r => r[dc])
進行枚舉(確切地說, string.Join
為我們做了這一點),在我們進入下一次迭代之前產生結果 -無論我們捕獲什么,都會立即使用。
您發布的鏈接清楚地說明了
如果設置了屬性,則為Expression值; 否則,ColumnName屬性。
這就是正在發生的事情。 你得到列名。
這可能會有所幫助: 如何將DataTable轉換為C#中的字符串?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.