2010-07-12 6 views
1

Je suis nouveau à LINQ to Entities et j'ai besoin de conseils sur la façon de penser aux mises à jour de plusieurs lignes. Mon problème est en fait plus conceptuel que syntaxique car je ne suis pas sûr si je pense même à la solution correctement.LINQ to Entities mise à jour de plusieurs lignes

Voici une mise à jour à une ligne. Cela semble très simple.

products prodtbl = (from p in db.products where p.product_id == 1 select p).First(); 
prodtbl.product_name = "Blueberry Jam"; 
db.SaveChanges(); 

Le problème se produit lorsque je souhaite mettre à jour plusieurs lignes (par exemple, supprimer la clause where). Alors prodtbl n'est pas adressable en tant que liste. Si je veux voir le nom du produit de la 10ème rangée est la seule manière de faire ceci comme suit?

'List<type> prodlist = prodtbl.ToList<type>()'; 
string name = prodlist[9].product_name 

Maintenant, si je change prodlist [9] .product_name, comment puis-je mettre à jour la ligne originale prodtbl? Puisque prodtbl n'est pas adressable en tant que tableau, je ne peux pas le définir, n'est-ce pas? Dois-je créer une instruction LINQ avec une clause where qui ne met à jour que le seul enregistrement? Si la réponse est 'oui, existe-t-il une méthode de mise à jour par lots si j'ai changé plusieurs lignes?

Répondre

1

Vous n'avez pas besoin de créer d'instructions séparées.

Vous pouvez utiliser, par exemple .:

prodtbl.ElementAt(9).product_name = "Bob"; 

Ou itérer:

foreach (var p in prodtbl) 
{ 
    p.product_name = "New name"; 
} 
+0

-vous Remerciez - qu'il répond. –

1

Vous pouvez effectuer cette action comme suit,

var objTrn = context.Trn_Dependent.Where(i => i.DependentID == DependentId).ToList(); 
         objTrn.ForEach(x => { x.IsDeleted = true; x.UpdatedBy = objUserInfo.EnrolleeID.ToString(); x.UpdatedOn = DateTime.Now; });       
         objTrn.ForEach(p => context.Entry(p).State = EntityState.Modified); 
context.SaveChanges();