繁体   English   中英

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

[英]How to perform an update using Linq or Lambda?(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);

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

因此,我正在阅读“网格”项并更新“数量”属性。

但是我确信必须有更好的方法通过linq或lambda来做到这一点。

请帮忙

提前致谢

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

请注意,.NET 4.0引入了Expression节点,可以更好地支持对突变的支持,但是C#编译器并未为其添加任何支持,因此Expression lambda仍然仅限于查询(至少通过语言)。

简而言之:也许坚持您所拥有的。 可以在此处添加一些LINQ,但是它将以与某些查询相同的方式从根本上更改代码,因此我看不出这样做的好处。

尝试这个:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM