如何使用Linq或Lambda执行更新?(C#,Asp.net,Linq,Lambda)

时间:2009-12-28 10:11:43

标签: c# asp.net linq lambda

如何在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);

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

所以我正在阅读Grid项目并更新Quantity属性。

但我相信通过linq或lambda必须有更好的方法来做同样的事情。

请帮忙

提前致谢

2 个答案:

答案 0 :(得分:6)

好吧,你可以用for循环替换一个foreach循环,或者可以使用内部执行相同操作的List<T>.ForEach,但最终LINQ是查询语法(因此是Q),而不是变异语法,尝试通过匿名方法(/ lambda)表示更新通常不是很有用。

请注意,.NET 4.0引入了Expression节点,允许更好地支持变异,但C#编译器不会为它们添加任何支持,因此Expression lambdas仍然仅限于查询(至少,通过语言)。

简而言之:也许坚持你所拥有的。你可以在这里添加一些LINQ,但是它会以与对某些查询相同的方式从根本上改变代码,所以我没有看到它的好处。

答案 1 :(得分:1)

试试这个:

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;                
  }
}