gpt4 book ai didi

c# - 使用linq无需select直接更新

转载 作者:IT王子 更新时间:2023-10-29 03:54:41 24 4
gpt4 key购买 nike

大家好。

我仍在学习 LINQ,所以请原谅我这是否天真。当您直接处理 SQL 时,您可以生成带条件的更新命令,而无需运行 select 语句。

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

  1. 选择实体
  2. 修改实体
  3. 提交更改

我想做的是使用 linq 和延迟执行的直接更新。实际执行是否可能直接在 SQL 上发生,而无需将任何数据传输到客户端?

DataContext dc = new DataContext

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

dc.SubmitChanges

所以本质上,LINQ 拥有它需要的所有信息,而无需使用选择来生成更新命令。它将运行 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

关于c# - 使用linq无需select直接更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/445033/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com