c#
  • linq
  • 2011-10-13 48 views 1 likes 
    1

    我目前使用具有我可以使用LINQ更新多列吗?

    Sql.Append("UPDATE Store SET" + 
    "LogoAlign='" + (String.Compare(drpLogoAlign.SelectedValue, String.Empty) == 0 ? "NULL" : "'" + drpLogoAlign.SelectedValue + "'") + 
    "', Height='" + DB.QuerySafeDisplayHTML(txtHeight.Text.ToString()) + 
    "', Width='" + DB.QuerySafeDisplayHTML(txtWidth.Text.ToString()) + 
    

    现有的代码,它继续这样,对表中的所有列正在更新。我想知道使用LINQ会更好,更容易,更有益,如果有的话,我会怎么做呢?

    感谢

    +2

    **警告**您的代码易受sql注入攻击。 –

    +1

    你用linq到sql或ef是什么? –

    +0

    LINQ本身不会更新,只会查询。如果您先将适当的对象绑定到GUI,其中一个ORM库可能会帮助您。 –

    回答

    0

    对LINQ到实体你可以得到所有的Store不是通过它们循环改变的价值和使用实体来SaveChanges

    例如:

    using (TestDBEntities ctx = new TestDBEntities()) 
    { 
        var allStore = ctx.Stores; 
        foreach(var store in allStore) 
        { 
         store.LogoAlign = (String.Compare(drpLogoAlign.SelectedValue, String.Empty) == 0 ? "NULL" : "'" + drpLogoAlign.SelectedValue + "'"); 
         store.Height = txtHeight.Text.ToString(); 
        } 
        ctx.SaveChanges(); 
    } 
    

    你可以做同样的使用LINQ要使用DataContext的SQL语句。

    using (TestDataContext ctx = new TestDataContext()) 
    { 
        var allStore = ctx.Stores; 
        foreach(var store in allStore) 
        { 
         store.LogoAlign = (String.Compare(drpLogoAlign.SelectedValue, String.Empty) == 0 ? "NULL" : "'" + drpLogoAlign.SelectedValue + "'"); 
         store.Height = txtHeight.Text.ToString(); 
        } 
        ctx.SubmitChanges(); 
    } 
    

    但是,如果你想更多的性能,我想应该是在stored procedure,这样你就不需要在更新之前得到的所有数据。

    +0

    谢谢你,我正在考虑你的建议,只是要创建一个存储过程,我会将你的答案标记为我使用的那个。谢谢你的帮助 –

    相关问题