Как обновить определенный столбец в datatable? - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть данные вроде этого.

ColA      ColB       ColC
100       text10     text25
100       text15     
100                  text26
100                  text25
100       text14     text22

Я хочу изменить значения в ColB и Col C, добавив начальный и конечный символы только для непустых значений в таблице данных ,

ColA      ColB       ColC
100       -text10-   -text25-
100       -text15-     
100                  -text26-
100                  -text25-
100       -text14-   -text22-

РЕДАКТИРОВАТЬ: я был в состоянии сделать это, проходя по датаровым и обновляя его. Но я ищу более простые и простые варианты. Есть ли способ добиться этого с помощью LINQ?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2020
Private dt As New DataTable

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    dt.Columns.Add("ColumnA", GetType(Integer))
    dt.Columns.Add("ColumnB", GetType(String))
    dt.Columns.Add("ColumnC", GetType(String))
    dt.Rows.Add(100, "text10", "text25")
    dt.Rows.Add(100, "text15")
    dt.Rows.Add(100, "", "text26")
    dt.Rows.Add(100, "", "text25")
    dt.Rows.Add(100, "text14", "text22")
End Sub

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    For Each row As DataRow In dt.Rows
        Dim colB As String = row(1).ToString
        Dim colC As String = row(2).ToString
        If Not String.IsNullOrEmpty(colB) Then
            row(1) = $"-{colB}-"
        End If
        If Not String.IsNullOrEmpty(colC) Then
            row(2) = $"-{colC}-"
        End If
    Next
    DataGridView1.DataSource = dt
End Sub

Я протестировал ColumnB и Column C отдельно и обновил данные в DataGable интерполированной строкой.

0 голосов
/ 12 февраля 2020

LINQ для достижения этого будет выглядеть следующим образом:

Предполагается, что ваше DbContext имя - "testEntities" в EF, а имя таблицы - multicols. Вы можете попробовать:

using (var db = new testEntities())
{
    (from m in db.multicols
          where m.ColB != null || m.ColC != null //Dont pull if both columns are null
          select m).ToList().ForEach( m =>
          {
              m.ColB = String.IsNullOrEmpty(m.ColB) ? m.ColB : $"-{m.ColB}-";
              m.ColC = String.IsNullOrEmpty(m.ColC) ? m.ColC : $"-{m.ColC}-";
           });

    db.SaveChanges();
}
...