当前位置:  开发笔记 > 编程语言 > 正文

使用linq生成直接更新而不选择

如何解决《使用linq生成直接更新而不选择》经验,为你挑选了2个好方法。

G'day大家.

我还在学习LINQ,如果这是天真的话请原谅我.当您直接处理SQL时,可以使用条件生成更新命令,而无需运行select语句.

当我使用linq时,我似乎遵循以下模式:

    选择实体

    修改实体

    提交更改

我想要做的是使用linq和延迟执行直接更新.是否可能直接在SQL上执行实际执行而没有任何数据传输到客户端?

DataContext dc = new DataContext

var q = from product in dc.Products
        where product.Type = 1
        set product.Count = 0

dc.SubmitChanges

因此,实质上LINQ具有所需的所有信息,而无需使用select来生成更新命令.它将运行SQL:

Update Products Set Count = 0 Where Type = 1

LINQ中是否存在类似"set"的关键字?



1> laktak..:

实际上,您可以让LINQ-to-SQL生成更新语句:

Foo foo=new Foo { FooId=fooId }; // create obj and set keys
context.Foos.Attach(foo);
foo.Name="test";
context.SubmitChanges();

在您的Dbml中,为所有属性设置UpdateCheck ="Never".

这将生成单个更新语句,而不必先进行选择.

需要注意的是:如果您希望能够将Name设置为null,则必须将foo对象初始化为不同的值,以便Linq可以检测到更改:

Foo foo=new Foo { FooId=fooId, Name="###" };
...
foo.Name=null;

如果您想在更新时检查时间戳,也可以这样做:

Foo foo=new Foo { FooId=fooId, Modified=... }; 
// Modified needs to be set to UpdateCheck="Always" in the dbml


但它并不完全基于.知道附加语法虽然很酷

2> Randolpho..:

不,LINQ和LINQ to SQL都没有基于集合的更新功能.

在LINQ to SQL中,您必须查询要更新的对象,根据需要更新字段/属性,然后调用SubmitChanges().例如:

var qry = from product in dc.Products where Product.Name=='Foobar' select product;
var item = qry.Single();
item.Count = 0;
dc.SubmitChanges();

如果您想进行批处理:

var qry = from product in dc.Products where Product.Type==1 select product;
foreach(var item in qry)
{
  item.Count = 0;
}
dc.SubmitChanges();

或者,您可以自己编写查询:

dc.ExecuteCommand("update Product set Count=0 where Type=1", null);


这真是愚蠢,linq to sql应该有一个更新字段
这个答案是不正确的.请参阅下面的克里斯答案.
推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有