Замените значения столбца лямбда-выражением в зависимости от условия

1

Используя лямбда, я хотел бы заменить значения datatable column item_type и item_status зависимости от этих условий:

  • item_type = "A", а затем заменить на "Apple"
  • item_type = "B" заменить на "Banana"
  • иначе показать исходные данные
  • item_status = "A", а затем заменить на "Apple"
  • item_status = "B" заменить на "Banana"
  • иначе показать исходные данные

command.CommandText = "select [item no], item_type, item_status from dbo.GetItems()";
command.CommandType = CommandType.Text;
da.SelectCommand = command;
da.Fill(dt);

dgItems.DataSource = dt;

Я хочу что-то вроде этого:

dgItems.DataSource = dt.Select(...);
  • 1
    какой источник данных дает da.Fill ? (это типизированный набор данных)? Это намного проще для вас (наличие IntelliSense). И поскольку вы хотите изменить результат, я не буду делать это с помощью LINQ (это антипаттерн) - используйте foreach и изменяйте его тело
  • 0
    Да. Вы можете изменить свой SQL или использовать цикл foreach для строк DataTable один раз для всех сценариев.
Показать ещё 2 комментария
Теги:
winforms
lambda

1 ответ

0

Я согласен с тем, что сделать это в вашем SQL-коде, чтобы получить нужные данные, было бы лучшим вариантом, если это возможно.

Чтобы ответить на заданный вопрос:

Array.ForEach(dt.Rows.Cast<DataRow>().ToArray(),
              row =>
              {
                  if (row.Field<string>("item_type") == "A")
                      row.SetField("item_type", "Apple");
                  else if (row.Field<string>("item_type") == "B")
                      row.SetField("item_type", "Banana");

                  if (row.Field<string>("item_status") == "A")
                      row.SetField("item_status", "Apple");
                  else if (row.Field<string>("item_type") == "B")
                      row.SetField("item_status", "Banana");
              });

Это изменит исходный DataTable.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню