代码之家  ›  专栏  ›  技术社区  ›  Marioh

更新多行Linq vs SQL

  •  17
  • Marioh  · 技术社区  · 17 年前

    不久前,我写了一段代码来更新数据库表中的多行。密码是这样的

    var db = new MyDataContext();
    db.Execute("UPDATE Details SET IsActive = 0 WHERE MasterId = 1");
    

    后来有一天,当我得到最新版本的文件时,我看到有人把代码改成了这样

    var details = from d in db.details where d.MasterId == 1 select d;
    foreach (var detail in details)
      detail.IsActive = false;
    db.SubmitChanges();
    

    5 回复  |  直到 17 年前
        1
  •  14
  •   Fahad Rehman Dekra    9 年前

    检查本文中使用的方法:

        2
  •  9
  •   tvanfosson    17 年前

        3
  •  4
  •   Druid    14 年前

    PLINQO实现了批量更新和删除,PLINQO生成的每个实体都可以使用批量更新和删除操作。

    context.Task.Update(t => t.Id == 1, t2 => new Task {StatusId = 2});
    

    这将执行 Update Task Set StatusId = 2 Where Id = 1

        4
  •  1
  •   Rup    15 年前
    for (int i = 0; i < pListOrderDetail.Count; i++)
    {
        for (int j = 0; j < stempdata.Count; j++)
        {
            pListOrderDetail[i].OrderID = pOrderID;
            pListOrderDetail[i].ProductID = stempdata[j].pProductID;
            pListOrderDetail[i].Quantity = stempdata[j].pQuantity;
            pListOrderDetail[i].UnitPrice = stempdata[j].pUnitPrice;
            pListOrderDetail[i].Discount = stempdata[j].pDiscount;
            db.SubmitChanges();
            break;
        }
        continue;
    }
    
        5
  •  0
  •   Rory MacLeod    14 年前

    Linq to SQL版本将 SELECT 每一行 details UPDATE 每个对象的语句,并且将(默认情况下)包括 WHERE 选择 . 如果行已更改,Linq将抛出异常。

    Linq版本的代码将是 很多

    在将来重构代码时,SQL版本可能更难维护,但它将对数据库产生影响。