当前位置: 首页 > 编程语言 > C#

如何在不加载整行的情况下更新LINQ中的单个列?分享

时间:2023-04-10 21:59:22 C#

如何在不加载整行的情况下更新LINQ中的单个列?在LinqToSql中,加载行、更改列并将更改提交到数据库非常容易:使用(MyDataContextwdc=newMyDataContext()){Articlearticle=wdc.Article.First(p=>p.ID==id);文章.ItemsInStock=itemsinstock;wdc.SubmitChanges();唯一的缺点:这篇文章很大。要加载整篇文章,仅更新一列是多余的,并且会显着降低我的应用程序的速度。有没有办法在不加载整行的情况下使用LINQ更新单个列?现在我恢复到使用ExecuteCommand速度至关重要,但这很丑陋且容易出错:wdc.ExecuteCommand("UPDATEArticleSETItemsInStock=@1WHEREID=@2",itemsinstock,id);将除主键之外的所有属性的UpdateCheck(单击LINQ2SQL设计器中的类属性并切换到属性工具窗口)设置为从不(不确定WhenChanged,也许这也有效-继续试验吧!)。这将强制LINQ2SQL使用UPDATE...SET...WHEREID=@2而不是WHERE子句中所有列的长版本:UPDATE...SET...WHEREID=@2ANDItemsInStock=@1ANDSomeOtherColumn=@3AND...现在你可以使用这样的代码context.Articles.Attach(article/*articlewithupdatedvalues*/,newArticle{ID=articleID,ItemsInStock=-1}/*假装这是原文*/);context.SubmitChanges();基本上你指出只有ItemsInStock属性发生了变化——其他道具应该具有相同的默认值,当然articleID是相同的。注意:您不需要在此之前获取文章。ligget78给了我另一个如何更新单个列的想法:为此类更新创建一个新的DataContext,并且只在此DataContext中包含所需的列。这样您就不会加载不需要的列,当然也不会将它们发送回数据库。可以正常使用ExecuteCommand("UPDATEtIdx_TicketActivitySETArchive={0}WHEREExpiryTimeStamp以上是C#学习教程:HowtoupdateasinglecolumninLINQwithoutloadingtheentirerow?整个内容分享一下,如果对大家有用以及需要了解更多C#学习教程,希望大家多多关注~本文采集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如有转载请注明出处: