Linq to sql LINQtoSQL如何为集合伪查询生成sql?

Linq to sql LINQtoSQL如何为集合伪查询生成sql?,linq-to-sql,Linq To Sql,我的理解是,LinqToSql伪语言使用非常类似于SQL的语法描述集合,这将允许您高效地更新对象集合上的属性: from b in BugsCollection where b.status = 'closed' set b.status = 'open' 这将只使用一条SQL语句更新底层数据库 通常,ORM需要将所有行重设为单独的对象,更新每个行上的属性,并将它们分别保存到数据库中(至少我是这样理解的) 那么,当其他orm无法避免时,linqtosql如何避免不得不这样做呢 问题中显示的语

我的理解是,LinqToSql伪语言使用非常类似于SQL的语法描述集合,这将允许您高效地更新对象集合上的属性:

from b in BugsCollection where b.status = 'closed' set b.status = 'open' 
这将只使用一条SQL语句更新底层数据库

通常,ORM需要将所有行重设为单独的对象,更新每个行上的属性,并将它们分别保存到数据库中(至少我是这样理解的)


那么,当其他orm无法避免时,linqtosql如何避免不得不这样做呢

问题中显示的语法不正确。LINQ不会产生副作用;它是一种查询语言。完成你想要的事情的正确方法是

var x = from b in dataContext.BugsCollection where b.status == "closed";
foreach (var y in x)
y.status = "open";

dataContext.SubmitChanges();

这将生成您正在讨论的单个SQL语句。它之所以能够做到这一点,是因为延迟执行—L2S引擎在必须与数据库通信之前不会与数据库通信—在本例中,是因为调用了SubmitChanges()。L2S然后将生成的SQL语句发送到数据库以执行

问题中显示的语法不正确。LINQ不会产生副作用;它是一种查询语言。完成你想要的事情的正确方法是

var x = from b in dataContext.BugsCollection where b.status == "closed";
foreach (var y in x)
y.status = "open";

dataContext.SubmitChanges();
这将生成您正在讨论的单个SQL语句。它之所以能够做到这一点,是因为延迟执行—L2S引擎在必须与数据库通信之前不会与数据库通信—在本例中,是因为调用了SubmitChanges()。L2S然后将生成的SQL语句发送到数据库以执行

因为LINQ to SQL用于将查询语法转换为实际的SQL…它然后对数据库执行SQL(而不是提取所有数据,对内存中的数据执行,然后将更改写回数据库)

例如,以下查询语法:

var records = from r in Records
              where r.Property == value
              select r
首先转换为Lamda语法:

Records.Where(r => r.Property == value).Select();
最后是SQL(通过):

…诚然,该示例不会更新任何内容…但更新查询的过程与简单选择的过程相同。

因为LINQ to SQL用于将查询语法转换为实际SQL…然后它对数据库执行SQL(而不是提取所有数据,对内存中的数据执行,然后将更改写回数据库)

例如,以下查询语法:

var records = from r in Records
              where r.Property == value
              select r
首先转换为Lamda语法:

Records.Where(r => r.Property == value).Select();
最后是SQL(通过):

…诚然,该示例不会更新任何内容…但更新查询的过程与简单选择的过程相同