2012-10-11 1 views
2

J'ai une table nommée industries. Dans ce mes champs sontlinq requête pour mettre à jour plus d'un enregistrement

  • workfor_id,
  • workfor_usr_id,
  • workfor_industry_id.

Avec les mêmes valeurs de workfor_id, j'ai différents workfor_industry_id.

foreach (var k in us){ 
    var ind = dbContext.industries.Where(i => i.workfor_id == 
     k.id).Select(i => i).FirstOrDefault(); 
    string ind2 = k.industry; 
    var industryParts = ind2.Split(','); 
    var o = (industryParts.Length); 
    for (c = 0; c < o; c++){ 
    ind.workfor_id = Convert.ToInt16(k.id); 
    ind.workfor_industry_id = Convert.ToInt16(k.industryid); } 
    } 

Pour mettre à jour le terrain workfor_industry_id J'ai mis en boucle interne dans la boucle foreach pour obtenir les valeurs de workfor_industry_id's.here même enregistrement est terminé avec le chargement de différents de workfor_industry_id.

pouvez-vous me dire comment implémenter cela.

+2

(1) Charger les données de votre contexte dans une liste '', (2) itérer sur les éléments de cette liste et faire vos mises à jour, (3) sauvegarder cela dans la base de données ..... –

+0

A l'intérieur de l'itération, je dois répéter une boucle pour obtenir workfor_industry_id.so le même enregistrement est en surcharge. – steve

+2

Vous n'êtes pas très clair sur ce que vous essayez de faire. Pouvez-vous s'il vous plaît ** mettre à jour ** votre question et nous montrer dans le code (même si c'est pseudo-code) ce que vous essayez de faire et où vous êtes coincé/incertain comment procéder? –

Répondre

0

MISE À JOUR Cette mise à jour ajoute un peu plus la vérification des erreurs et suppose que -1 est jamais une valeur valide pour industry_id

short GetShort(string value) { 
    short returnValue; 
    value = (value ?? string.Empty).Replace("\"",null); 
    return short.TryParse(value, out returnValue) ? returnValue : (short)-1; 
} 

foreach (var k in us){ 
    var id=Convert.ToInt16(k.id); 
    var toRemove=from i in dbContext.industries 
       where i.workfor_id == k.id 
       select i; 
    var toAdd = from x in (k.industry ?? string.Empty).Split(',') 
       select new Industry { 
         workfor_id=id, 
         workfor_industry_id=GetShort(x) 
        }; 

    dbContext.industries.DeleteAllOnSubmit(toRemove); 
    dbContext.industries.InsertAllOnSubmit(toAdd.Where(x=>x.workfor_industry_id != -1)); 

} 
dbContext.SubmitChanges(); 
+0

similaire à cela, dans le àRetirer je reçois le exact enregistrements mais dans le toAdd je ne reçois aucun enregistrement et il est dit que la chaîne d'entrée n'était pas dans le bon format. Dans le k.industry je reçois des valeurs au format "4,1". – steve

+0

@steve L'erreur que vous obtenez indiquerait que x au moment de l'analyse n'est pas un nombre entier valide. Quel est le comportement que vous voulez si chaque entrée n'est pas un entier valide? –

+0

en fait workfor_industry_id est de type short.and j'ai fait de petits changements, à k.industry.Split (',') je reçois comme format "4,1" – steve

Questions connexes