[英]DataTable to List in C#
我正在尋找使用C#將數據表的一列轉換為字符串列表。 我嘗試了在stackoverflow上找到的其他4種解決方案,其中一些使用LINQ,而另一些使用foreach循環。 到目前為止,他們都沒有工作,這就是為什么我感到困惑。 我將包括我的數據表代碼。 失敗的解決方案之一在代碼中被注釋掉。
C#:
private DataTable GetData(SqlCommand cmd)
{
DataTable dt = new DataTable();
SqlConnection conn = new SqlConnection(strConnString);
SqlDataAdapter adapter = new SqlDataAdapter();
cmd.CommandType = CommandType.Text;
cmd.Connection = conn;
adapter.SelectCommand = cmd;
adapter.Fill(dt);
//failed solution 1
// var list = dt.Rows.OfType<DataRow>()
//.Select(dr => dr.Field<string>("CraftType")).ToList();
//failed solution 2
/* List<string> s = dt.AsEnumerable().Select(x => x[6].ToString()).ToList();
foreach (string e in s)
{
Console.WriteLine(e);
Console.ReadLine();
}*/
return dt;
}
迭代Columns
集合 。 例:
private void PrintTable(DataTable table)
{
foreach(DataRow row in table.Rows)
{
PrintRow(table, row);
}
}
private void PrintRow(DataTable table, DataRow row)
{
foreach(DataColumn column in table.Columns)
{
Console.Write(row[column] + " ");
}
}
由於您的兩次嘗試都在LINQ中進行,因此下面是使用LINQ的解決方案:
var strings = dt.Rows.Cast<DataRow>().Select(row => row["(columnname)"].ToString());
我通過在row [col]值上調用.ToString()
來假設您想要字符串。 這里也沒有錯誤檢查(例如,col / DBNull
檢查是否存在)
為了更加方便,我將其轉換為擴展方法:
public static class DataTableExtensions
{
public static IEnumerable<string> GetDataInColumn(this DataColumn column)
{
return column.Table.Rows.Cast<DataRow>().Select(row => row[column.ColumnName].ToString());
}
}
然后,您可以執行以下操作:
class Program
{
static void Main(string[] args)
{
var table = new DataTable();
table.Columns.Add("Column1");
table.Columns.Add("Column2");
table.Rows.Add(new[] { "col1row1", "col2row1" });
table.Rows.Add(new[] { "col1row2", "col2row2" });
var strings = table.Columns["Column2"].GetDataInColumn();
strings.ToList().ForEach(s => Console.WriteLine(s));
Console.ReadLine();
}
}
//Will output
//col2row1
//col2row2
我使用了@RobertHarvey代碼的一部分。 他們有太多的循環,而Console.Write
不在我的頁面上書寫。 此代碼段提取了我指定的列並將其作為列表寫到我的頁面上。
private void PrintTable(DataTable table)
{
foreach (DataRow row in table.Rows)
{
Response.Write(row[column] + "<br />");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.