我希望使用C#将我的数据表的一列转换为字符串列表。我已经尝试过4个其他解决方案,我已经在stackoverflow上找到了,有些使用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;
}
答案 0 :(得分:2)
迭代Columns
collection。例如:
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] + " ");
}
}
答案 1 :(得分:2)
由于您的尝试都在LINQ中,所以使用LINQ的解决方案:
var strings = dt.Rows.Cast<DataRow>().Select(row => row["(columnname)"].ToString());
我通过在行[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
答案 2 :(得分:0)
我使用了部分@RobertHarvey代码。他们有太多的循环,Console.Write
没有写在我的页面上。此代码段采用了我指定的列,并将其作为列表写入我的页面。
private void PrintTable(DataTable table)
{
foreach (DataRow row in table.Rows)
{
Response.Write(row[column] + "<br />");
}
}