目前我更新数据库中的单个项目如下:
var master = (from tmi in db._Masters where tmi.Id == Id select tmi).FirstOrDefault();
master.logPosition++;
db.SubmitChanges();
这让我觉得效率低下,因为(我认为)我正在提取一个完整的DB行来更新单个值。我可以使用更高效的查询吗?
答案 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
在我的博客上。