2009-05-26 33 views

Respuesta

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 es una herramienta de consulta (Q = Consulta) - por lo que no hay manera de LINQ magia para actualizar sólo la hilera, excepto a través de la (orientado a objetos) de datos de contexto (en el caso de LINQ- to-SQL). Para actualizar los datos, es necesario buscarlo fuera, actualizar el registro, y presentar los cambios:

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

O escribir un SP que hace lo mismo en TSQL, y exponer el SP a través de la técnica de contexto:

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

@Mathieu - ¿Usted propone que adivine valores para las 200 propiedades? necesitan venir de algún lado ... –

+0

Lo siento, tenía algo en mente que no se muestra aquí, mi mal. – Mathieu

+0

excelente ejemplo de actualización. gracias amigo –

3

En ausencia de información más detallada:

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

Eso no compilará; Donde (pred) devolverá un IQueryable , no un SomeType –

+0

¡Uy! Mi error. Corregido – spender

+2

Puede usar el Single (pred) en lugar 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

No es un problema aquí (dado que es un nuevo contexto de datos), pero hay un error en DataContext que lo hace más eficiente de usar (para búsquedas de identidad) SingleODefault (predicado) que Where (predicate) .SingleOrDefault(). También; si falla, ¿por qué no dejas que arroje una excepción? Ah, y es IDisposable. –

8

actualización

NorthwindDataContext db = new NorthwindDataContext(); 

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

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

db.SubmitChanges(); 

Insertar

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

¿Por qué la molestia con las imágenes, es más útil y, sin duda, mejor búsqueda para utilizar la función de diseño de código –

+1

estos son del blog de scott gu – sabbour

+1

sí, estás en lo cierto. estos son de allí .. – Waheed

0

he encontrado una solución hace una semana. Puede usar los comandos directos con "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); 
} 

En la declaración ExecuteCommand, puede enviar la consulta directamente, con el valor para el registro específico que desea actualizar.

valor = 0 -> 0 es el nuevo valor para el registro;

código = {0} -> es el campo donde enviará el valor del filtro;

Código -> es el nuevo valor para el campo;

Espero que esta referencia ayude.

+2

¿Por qué usar ExecuteCommand para actualizar? Parece un poco extraño hacer eso cuando simplemente puede actualizar el objeto y llamar a 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();