0

何が悪いのか見てください。データ行を文字列リストに変換したい。

 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.
    }

手伝ってくれてありがとう。

4

4 に答える 4

8

ここにはいくつかの問題がありますが、最大の問題は、実際には1 つのセルだけを文字列に変換しようとしているのに、行全体を文字列に変換しようとしているということです。その の最初の列を参照する必要があります。これは、ブラケット (配列など) で行うことができます。DataRow

代わりに次のようにしてみてください。

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.
}
于 2012-05-22T18:43:38.893 に答える
8

これを行う方法について ReSharper から得た 1 つのライナーを次に示します。パフォーマンスへの影響がわからないので、共有したいと思いました。

List<string> companyProxies = Enumerable.Select(
            vendors.Tables[0].AsEnumerable(), vendor => vendor["CompanyName"].ToString()).ToList();
于 2012-08-20T13:08:08.070 に答える
0

Linqの方法...

    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;
    }
于 2012-05-22T19:10:33.357 に答える