大家好。
我仍在学习 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”这样的关键字?
您实际上可以让 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)