2014-09-02 85 views
1

使用lambda,我想更换根据这些条件的数据表列item_typeitem_status的值:替换列值

  • ITEM_TYPE =“A”,则与“苹果”
  • 替换
  • ITEM_TYPE = “B” 与 “香蕉” 更换
  • 否则显示原始数据
  • ITEM_STATUS = “A”,则与 “苹果”
  • ITEM_STATUS = “B” repla取代用 “香蕉” CE
  • 否则显示原始数据

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'? (它是一个类型化的数据集)?这对你自己来说更容易(拥有智能感知)。而且,如果你想改变结果,我会**不**使用LINQ(这是一个反模式) - 使用'foreach'并在它内部进行变异 – Carsten 2014-09-02 06:01:02

+0

是的。对于所有场景,您可以更改您的'SQL'或在DataTable行上使用'foreach'循环一次。 – Hassan 2014-09-02 06:05:39

+0

我想说,你试图以错误的方式做这个totaly,这样的转换应该在数据库方面作为额外的列中的显示值而不是在代码中的某处通常完成。 – 2014-09-02 06:11:01

回答

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