簡體   English   中英

要在C#中列出的數據表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM