Susbtring из столбца таблицы данных - PullRequest
0 голосов
/ 04 октября 2018

Может кто-нибудь помочь мне с этим?

У меня есть дата 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 голосов
/ 04 октября 2018

Вы можете использовать

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];
0 голосов
/ 04 октября 2018

Если вы хотите сделать это для каждой строки в вашей таблице, вы должны сделать что-то вроде этого:

    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. Я не помню).

0 голосов
/ 04 октября 2018

Какой код у вас уже есть?

Я полагаю, вам нужно что-то вроде:

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 - индекс строкиВы хотите изменить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...