仅更新linq中的单个项目

时间:2010-11-10 16:16:40

标签: c# asp.net linq

目前我更新数据库中的单个项目如下:

 var master = (from tmi in db._Masters where tmi.Id == Id select tmi).FirstOrDefault();
 master.logPosition++;
 db.SubmitChanges();

这让我觉得效率低下,因为(我认为)我正在提取一个完整的DB行来更新单个值。我可以使用更高效的查询吗?

3 个答案:

答案 0 :(得分:2)

您可以通过调整原始linq选择来仅选择要修改的字段:

var master = (from tmi in db._Masters 
              where tmi.Id == Id 
              select new { tmi.logPosition }).FirstOrDefault(); 
 master.logPosition++; 
 db.SubmitChanges(); 

编辑:通过在关联属性中选择特定数据,属性logPosition应该失去其只读状态并且可以完全更新。

var master = (from tmi in db._Masters 
              where tmi.Id == Id 
              select new { 
                  ID = tmi.ID, 
                  logPosition = tmi.logPosition }).FirstOrDefault(); 
 master.logPosition++; 
 db.SubmitChanges(); 

答案 1 :(得分:1)

我认为这是LINQ to SQL;请纠正错误。

您可以创建存储过程和pull that stored procedure into your DataContext,然后调用存储过程而不是使用上述查询。

或者,您可以手写更新查询并使用DataContext.ExecuteQuery执行查询。

然而,除非您了解并确定这是否真的是一个瓶颈,否则这一切都不重要。如果不是,我会坚持使用最简单的,这是你已经拥有的。

答案 2 :(得分:0)

@linq

我无法得到乔尔接受的工作答案。

select new {}创建一个不可更新的匿名类型(正如您在评论中所述,另请参阅this question),也不是DataContext的一部分。

我描述了几个possible solutions

  • 存储过程
  • 查看
  • ExecuteCommand
  • dbml mappings

在我的博客上。