使用.Select语句在Datatable中从字符串更改为Int不能将字符串转换为int

时间:2016-01-12 17:20:38

标签: c# .net datatable datarow

我有一个我克隆的DataTable,最后我添加了许多模型支持的属性。

我在使用dotnetfiddle.net进行沙箱/游乐场工作时注意到的一件事是,我没有使用数据类型为int的重要ID列。

https://dotnetfiddle.net/dRrlVu

现在我已将其添加到

我正在改变

foreach (string id in distinctRows)

foreach (Int32 id in distinctRows)

我真的根本不理解这行代码

var rows = dt.Select("ID = '" + id + "'");

当然现在它从一个字符串转到了一个会成为问题的int,但我怎么能解决它。

public int id { get; set; }

dotnetfiddle https://dotnetfiddle.net/dRrlVu

中的代码
    DataTable dt = new DataTable();
    dt.Columns.Add("ID", typeof (int));
    dt.Columns.Add("Name", typeof (string));
    dt.Columns.Add("Result", typeof (string));
    dt.Columns.Add("other", typeof (string));
    dt.Rows.Add(1, "John", "1,2,3,4,5", "b");
    dt.Rows.Add(2, "Mary ", "5,6,7,8", "d");
    dt.Rows.Add(3, "John", "6,7,8,9", "a");
    DataTable dtRsult = dt.Clone();


    var distinctRows = dt.DefaultView.ToTable(true, "ID").Rows.OfType<DataRow>().Select(k => k[0] + "").ToArray();

    //foreach (string id in distinctRows)
    foreach (Int32  in distinctRows)
    {
        var rows = dt.Select("ID = '" + id + "'");
        //var rows = dt.Select("ID = '" + id + "'");
        string value = "";
        string other = "";
        foreach (DataRow row in rows)
        {
            value += row["Result"] + ",";
            other += row["other"];
        }

        value = value.Trim(',');
        dtRsult.Rows.Add(id, value, other);
        value = "";
        other = "";
    }

    var output = dtRsult;
    foreach (DataRow dr in dtRsult.Rows)
    {
        Console.WriteLine(dr[0] + " --- " + dr[1] + "---- " + dr[2]);
    }

1 个答案:

答案 0 :(得分:1)

这段代码

....Select(k => k[0] + "").....

获取枚举行的第一列(类型为整数的ID字段),并使用带有空字符串的+运算符。 The + operator应用于整数时,字符串会转换字符串中的所有内容。然后将结果字符串添加到枚举中以返回并转换为数组

结果var distinctRows只是一个字符串数组 当然,您不能使用带有Int32的foreach来遍历您的字符串集合

如果删除该运算符且空字符串将运行

var distinctRows = dt.DefaultView
                     .ToTable(true, "ID")
                     .Rows.OfType<DataRow>()
                     .Select(k => k[0])
                     .ToArray();