2009-12-28 5 views
2

Comment puis-je faire une mise à jour dans LinqComment effectuer une mise à jour en utilisant Linq ou Lambda? (C#, Asp.net, Linq, Lambda)

Mon code est

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

Fondamentalement dans le panier Collection, il y a un article appelé une quantité qui sera rempli lorsque l'utilisateur remplira cela. Donc, je suis en train de lire l'article Grid et de mettre à jour l'attribut Quantity.

Mais je suis sûr qu'il doit y avoir un meilleur moyen via linq ou lambda de faire la même chose.

S'il vous plaît aider

Merci à l'avance

Répondre

6

Eh bien, vous pouvez remplacer une boucle for avec une boucle foreach, ou peut-être utiliser le qui fait la même en interne, mais en fin de compte LINQ est une requête syntaxe (d'où le Q), pas une syntaxe de mutation, et il n'est généralement pas très utile d'essayer de représenter les mises à jour via une méthode anonyme (/ lambda).

Notez que .NET 4.0 présente Expression noeuds qui permettent un meilleur soutien à la mutation, mais le compilateur C# n'ajoute aucun soutien pour eux, donc Expression lambdas sont encore limités à interroger (au moins, par la langue).

En bref: peut-être s'en tenir à ce que vous avez. Vous pourrait ajouter un peu de LINQ ici, mais il changerait radicalement le code de la même manière qu'il le peut pour certaines requêtes, donc je ne vois pas l'avantage.

1

essayez ceci:

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