Используя лямбда, я хотел бы заменить значения datatable column item_type
и item_status
зависимости от этих условий:
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(...);
Я согласен с тем, что сделать это в вашем 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
.
da.Fill
? (это типизированный набор данных)? Это намного проще для вас (наличие IntelliSense). И поскольку вы хотите изменить результат, я не буду делать это с помощью LINQ (это антипаттерн) - используйтеforeach
и изменяйте его телоSQL
или использовать циклforeach
для строк DataTable один раз для всех сценариев.