2009-05-26 7 views

Répondre

2
AdventureWorksDataContext db = new AdventureWorksDataContext(); 
db.Log = Console.Out; 

// Get hte first customer record 
Customer c = from cust in db.Customers select cust where id = 5; 
Console.WriteLine(c.CustomerType); 
c.CustomerType = 'I'; 
db.SubmitChanges(); // Save the changes away 
55

LINQ est un outil d'interrogation (Q = Query) - donc il n'y a aucun moyen magique LINQ pour mettre à jour seulement l'unique rangée, sauf par l'intermédiaire du contexte de données (orienté objet) (dans le cas de LINQ- to-SQL). Pour mettre à jour les données, vous devez chercher dehors, mettre à jour le dossier et soumettre les modifications:

using(var ctx = new FooContext()) { 
    var obj = ctx.Bars.Single(x=>x.Id == id); 
    obj.SomeProp = 123; 
    ctx.SubmitChanges(); 
} 

Ou écrire un SP qui fait la même chose dans TSQL, et d'exposer la SP par les données contexte:

using(var ctx = new FooContext()) { 
    ctx.UpdateBar(id, 123); 
} 
+0

@Mathieu - proposez-vous qu'il devine des valeurs pour les 200 propriétés? ils doivent venir de quelque part ... –

+0

Désolé, j'avais quelque chose en tête qui n'est pas montré ici, mon mauvais. – Mathieu

+0

excellent exemple de mise à jour. merci ami –

3

En l'absence d'informations plus détaillées:

using(var dbContext = new dbDataContext()) 
{ 
    var data = dbContext.SomeTable.SingleOrDefault(row => row.id == requiredId); 
    if(data != null) 
    { 
     data.SomeField = newValue; 
    } 
    dbContext.SubmitChanges(); 
} 
+0

Cela ne compilera pas; Où (pred) retournera un de IQueryable, pas un Oops de SomeType –

+0

. Ma faute. Corrigée. – spender

+2

Vous pouvez utiliser le Single (pred) au lieu de Where (pred) .FirstOrDefault() ... –

18
public bool UpdateCustomerIno(CustomerInfo toUpdate) 
{ 
    bool successfullySaved = false; 

    var db = new DataClasses1DataContext(); 
    try 
    { 
     var dbCstInfo = db.CustomerInfos 
      .Where(w => w.CustomerID == toUpdate.CustomerID) 
      .SingleOrDefault(); 

     if (dbCstInfo != null) 
     { 
      dbCstInfo.FirstName = toUpdate.FirstName; 
      dbCstInfo.LastName = toUpdate.LastName; 
      db.SubmitChanges(); 
      successfullySaved = true; 
     } 
    } 
    catch { 
     successfullySaved = false; 
    } 
    return successfullySaved; 
} 
+7

Pas de problème ici (puisqu'il s'agit d'un nouveau contexte de données), mais il existe un bogue dans DataContext qui le rend plus efficace (pour les recherches d'identité) SingleODefault (prédicat) que Where (prédicat) .SingleOrDefault(). Aussi; Si cela échoue, pourquoi ne pas le laisser jeter une exception? Oh, et c'est IDisposable. –

8

Mise à jour

NorthwindDataContext db = new NorthwindDataContext(); 

Product product = db.Products.Single(p => p.ProductName == "Toy 1"); 

product.UnitPrice = 99; 
product.UnitsInStock = 5; 

db.SubmitChanges(); 

Insérer

Dim db As New NorthwindDataContext 

' Create New category and Products 
Dim category As New Category 
category.CategoryName = "Scott's Toys" 

Dim product1 As New Product 
category.ProductName = "Toy 1" 

Dim product2 As New Product 
category.ProductName = "Toy 2" 
+5

Pourquoi les tracas avec les images, il est plus utile et certainement mieux consultable pour utiliser la fonctionnalité de mise en page de code –

+1

ceux-ci sont du blog de scott gu – sabbour

+1

oui vous avez raison. ceux-ci sont de là .. – Waheed

0

J'ai trouvé une solution il y a une semaine. Vous pouvez utiliser des commandes directes avec « ExecuteCommand »: Dans la déclaration ExecuteCommand

MDataContext dc = new MDataContext(); 
var flag = (from f in dc.Flags 
        where f.Code == Code 
        select f).First(); 
_refresh = Convert.ToBoolean(flagRefresh.Value); 
if (_refresh) 
{ 
    dc.ExecuteCommand("update Flags set value = 0 where code = {0}", Code); 
} 

, vous pouvez envoyer la requête directement, avec la valeur de l'enregistrement spécifique que vous souhaitez mettre à jour.

valeur = 0 -> 0 est la nouvelle valeur de l'enregistrement; Code = {0} -> est le champ où vous enverrez la valeur du filtre;

Code -> est la nouvelle valeur pour le champ;

J'espère que cette référence est utile.

+2

Pourquoi utiliser ExecuteCommand pour mettre à jour !!? Cela semble un peu étrange de le faire lorsque vous pouvez simplement mettre à jour l'objet et appeler SubmitChanges. – DazManCat

2
DataClassesDataContext dc = new DataClassesDataContext(); 

FamilyDetail fd = dc.FamilyDetails.Single(p => p.UserId == 1); 

fd.FatherName=txtFatherName.Text; 
     fd.FatherMobile=txtMobile.Text; 
     fd.FatherOccupation=txtFatherOccu.Text; 
     fd.MotherName=txtMotherName.Text; 
     fd.MotherOccupation=txtMotherOccu.Text; 
     fd.Phone=txtPhoneNo.Text; 
     fd.Address=txtAddress.Text; 
     fd.GuardianName=txtGardianName.Text; 

     dc.SubmitChanges(); 
Questions connexes