从数据表列中获取

时间:2018-10-04 13:44:28

标签: c# linq datatable substring

有人可以帮我吗?

我有一个从数据库填充的数据表'dt'。 我的dt有两列,我需要对其进行子字符串化。我想在特定字符(=)之后切掉字符。并将其推回我的dt。

我一直在尝试不同的方法,但是没有任何效果。我确定我缺少什么。

private DataTable MyTableWhenExport(DataTable dt) {
    if (dt != null && dt.Rows.Count > 0) {
        (dt.Columns["MyColumn"]) = dt["yMyColumn"]
            .Substring(0, dt["MyColumn"].LastIndexOf("=") + 1); // My substring code here
    }
    return dt;
} 

有人可以帮我吗

3 个答案:

答案 0 :(得分:1)

您可以使用

string firstPart = theString.Split('=')[0];

检索=之前的部分。如果字符串不包含等号,则返回整个字符串。

如果字符串可以为null,请使用

string firstPart = theString?.Split('=')[0];

您必须访问DataTable的行。 dt.Columns仅包含列定义(如标题),而不包含实际单元格值。

DataRow row = dt.Rows[0];
string oldValue = (string)row["MyColumn"];  // Returns an object. Therefore cast to string.
row["MyColumn"] = oldValue?.Split('=')[0];

答案 1 :(得分:0)

您已经拥有什么代码?

我想您需要类似的东西:

dt["yourColumn"] = dt["yourColumn"].Substring(0, dt["yourColumn"].LastIndexOf("=") + 1);

祝你好运!

编辑: 抱歉,我上面的答案是完全错误的!我使用数据集和数据表已经很长时间了(Entity Framework使其过时了)。 您首先需要引用要修改的行,然后引用列(即字段)。

类似的东西:

dt[0]["yourColumn"] = dt[0]["yourColumn"].Substring(0, dt[0]["yourColumn"].LastIndexOf("=") + 1);

0是要更改的行的索引。

答案 2 :(得分:0)

如果要对表中的每一行执行此操作,则必须执行以下操作:

    DataTable MyTableWhenExport(DataTable dt)
    {
        // insert argument checking here

        foreach (var dataRow in dt.AsEnumerable())
        {
            var value = dataRow.Field<string>("MyColumn");

            if (string.IsNullOrWhitespace(value))
            {
                // handle accordingly
            }
            else
            {
                value = value.Substring(0, value.LastIndexOf('=') + 1);
                dataRow.SetField("MyColumn", value);
            }
        }

        return dt;
    }

请注意,您无法通过直接索引DataTable来访问行值。

此外,此答案还假定您可以使用LINQ。

请注意,如果字符串中可能不包含=,则LastIndexOf将返回-1。我还没有测试过,但是看起来那种情况下内容会被截断(如果Substring不希望您请求长度为0的子字符串,则会抛出异常。我不记得了)