代码之家  ›  专栏  ›  技术社区  ›  priyanka.sarkar

如何使用LINQ或lambda执行更新?(C,ASP.NET,LINQ,lambda)

  •  2
  • priyanka.sarkar  · 技术社区  · 16 年前

    如何在Linq中进行更新

    我的代码是

    List<Cart> objNewCartItems = (List<Cart>)Session["CartItems"];
    
                if ((objNewCartItems != null) && (objNewCartItems.Count > 0))
                {
                    for (int i = 0; i < dgShoppingCart.Rows.Count; i++)
                    {
                        Cart c = new Cart();
                        TextBox t = (TextBox)dgShoppingCart.Rows[i].FindControl("txtQuantity");
                        c.Quantity = (t.Text == string.Empty? (int?)null: Convert.ToInt32(t.Text));
    
                        objNewCartItems[i].Quantity = c.Quantity;
                    }
                }
                Session["CartItems"] = objNewCartItems;            
                Response.Redirect("ItemListing.aspx", false);
    

    基本上,在购物车集合中,有一个称为数量的项,当用户填充该项时,将填充该项。

    所以我正在读取网格项并更新数量属性。

    但我相信一定有更好的方法通过LINQ或lambda来实现这一点。

    请帮助

    提前谢谢

    2 回复  |  直到 15 年前
        1
  •  6
  •   Marc Gravell    16 年前

    嗯,你可以换一个 for 循环带 foreach 循环,或者使用 List<T>.ForEach 这在内部也是一样的,但最终Linq是 查询 语法(因此是q),而不是突变语法,尝试通过匿名方法(/lambda)表示更新通常不是非常有益的。

    注意.NET 4.0引入了 Expression 允许更好地支持突变的节点,但C编译器不添加对它们的任何支持,因此 表情 lambda仍然局限于查询(至少通过语言)。

    简言之:也许坚持你现有的。你 能够 在这里添加一些LINQ,但是它会以与某些查询相同的方式彻底改变代码,所以我看不到好处。

        2
  •  1
  •   Whimsical    15 年前

    试试这个:

    int interator = 0;
    
    List<Cart> objNewCartItems = (List<Cart>)Session["CartItems"];
    
    objNewCartItems.ForEach( i => i.Quantity = GetCartQuantity(interator++));
    
    Session["CartItems"] = objNewCartItems;            
    Response.Redirect("ItemListing.aspx", false);
    
    private int GetCartQuantity(int interator)
    {
      if ((objNewCartItems != null) && (objNewCartItems.Count > 0))
      {
        Cart c = new Cart();
        TextBox t = (TextBox)dgShoppingCart.Rows[interator].FindControl("txtQuantity");
        c.Quantity = (t.Text == string.Empty? (int?)null: Convert.ToInt32(t.Text));
        return c.Quantity;                
      }
    }