DataTable在C#中列出

时间:2014-08-08 23:46:51

标签: c# linq datatable

我希望使用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;
    }

3 个答案:

答案 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 />");
    }
}