2009-05-26 3 views

ответ

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 является инструментом запроса (Q = Запрос) - так что нет никакой волшебной LINQ способ обновить только одну строку, кроме как через (объектно-ориентированного) данных контекста (в случае LINQ- к-SQL). Для обновления данных, вам нужно получить его, обновить запись, и отправить изменения:

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

Или написать SP, который делает то же самое в TSQL, и разоблачить SP через данные контекста:

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

@Mathieu - вы предполагаете, что он угадывает значения для 200 свойств? они должны откуда-то приехать ... –

+0

Извините, у меня было что-то в виду, которое здесь не показано, мое плохое. – Mathieu

+0

отличный пример обновления. спасибо другу –

3

В отсутствие более подробной информации:

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

Это не скомпилируется; Где (pred) вернет IQueryable , а не SomeType –

+0

. Виноват. Исправленный. – spender

+2

Вы можете использовать Single (pred) вместо 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

Не проблема здесь (поскольку это новый контекст данных), но в DataContext есть ошибка, которая делает ее более эффективной для использования (для поиска идентичности) SingleODefault (предикат), чем Where (предикат) .SingleOrDefault(). Также; если это не удается, почему бы вам не дать ему исключение? О, и это IDisposable. –

8

Update

NorthwindDataContext db = new NorthwindDataContext(); 

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

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

db.SubmitChanges(); 

Вставка

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

Зачем нужна проблема с изображениями, более полезно и, конечно, лучше искать возможность использования функции компоновки кода. –

+1

это из блога scott gu – sabbour

+1

yes u are correct. это оттуда .. – Waheed

0

Я нашел обходной путь неделю назад. Вы можете использовать прямые команды с «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); 
} 

В ExecuteCommand заявлении, вы можете отправить запрос непосредственно, со значением для конкретной записи, которую вы хотите обновить.

value = 0 -> 0 - новое значение для записи;

code = {0} -> это поле, в которое вы отправите значение фильтра;

Код -> - новое значение для поля;

Я надеюсь, что эта ссылка поможет.

+2

Зачем использовать ExecuteCommand для обновления !!? Кажется немного странным, когда вы можете просто обновить объект и вызвать 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(); 
Смежные вопросы