Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将数据行(仅单列)转换为字符串列表_C#_Linq_Datatable_Datarow - Fatal编程技术网

C# 将数据行(仅单列)转换为字符串列表

C# 将数据行(仅单列)转换为字符串列表,c#,linq,datatable,datarow,C#,Linq,Datatable,Datarow,请看什么地方出了问题?我想将datarow转换为字符串列表 public List<string> GetEmailList() { // get DataTable dt from somewhere. List<DataRow> drlist = dt.AsEnumerable().ToList(); List<string> sEmail = new List<string>();

请看什么地方出了问题?我想将datarow转换为字符串列表

 public List<string> GetEmailList()
    {
        // get DataTable dt from somewhere.
        List<DataRow> drlist = dt.AsEnumerable().ToList();
        List<string> sEmail = new List<string>();
        foreach (object str in drlist)
        {
            sEmail.Add(str.ToString()); // exception
        }
        return sEmail; // Ultimately to get a string list.
    }

谢谢您的帮助。

这里有几个问题,但最大的问题是您试图将整行转换为字符串,而实际上您应该尝试将单个单元格转换为字符串。您需要引用该数据行的第一列,可以使用括号(如数组)进行引用

请尝试以下方法:

public List<string> GetEmailList()
{
    // get DataTable dt from somewhere.
    List<string> sEmail = new List<string>();
    foreach (DataRow row in dt.Rows)
    {
        sEmail.Add(row[0].ToString());
    }
    return sEmail; // Ultimately to get a string list.
}
林克之路

    private static void Main(string[] args)
    {
        var dt = getdt();

        var output = dt
            .Rows
            .Cast<DataRow>()
            .ToList();

        // or a CSV line
        var csv = dt
            .Rows
            .Cast<DataRow>()
            .Aggregate(new StringBuilder(), (sb, dr) => sb.AppendFormat(",{0}", dr[0]))
            .Remove(0, 1);

        Console.WriteLine(csv);
        Console.ReadLine();
    }

    private static DataTable getdt()
    {
        var dc = new DataColumn("column1");
        var dt = new DataTable("table1");
        dt.Columns.Add(dc);
        Enumerable.Range(0, 10)
            .AsParallel()
            .Select(i => string.Format("row {0}", i))
            .ToList()
            .ForEach(s =>
            {
                var dr = dt.NewRow();
                dr[dc] = s;
                dt.Rows.Add(dr);
            });
        return dt;
    }

这是我从ReSharper那里得到的一条关于如何做到这一点的建议,我不确定它对性能的影响,只是想和大家分享一下

List<string> companyProxies = Enumerable.Select(
            vendors.Tables[0].AsEnumerable(), vendor => vendor["CompanyName"].ToString()).ToList();

下面是所有附加语法噪声去除后的情况:一行

public List<string> GetEmailList()
{
    return dt.AsEnumerable().Select(r => r[0].ToString()).ToList();
}

哪列包含您的电子邮件数据?供应商的类型是什么?供应商是ADO.NET数据集