有没有一种使用Linq进行插入/选择的方法,可以将其转换为这个SQL语句:
INSERT INTO TableA (...)
SELECT ...
FROM TableB
WHERE ...
INSERT INTO TableA (...)
SELECT ...
FROM TableB
WHERE ...
是的,@bzlm首先提到了它,但如果你更喜欢详细一点的内容:
// dc = DataContext, assumes TableA contains items of type A
var toInsert = from b in TableB
where ...
select new A
{
...
};
TableA.InsertAllOnSubmit(toInsert);
dc.SubmitChanges();
从维护和审查的角度来看,我更喜欢这种方式,因为我认为在选择中会更加明显。
针对@JfBeaulac的观察,请注意,这个操作不会生成所示的SQL语句 - 就我所知,使用Linq(to SQL)直接生成SQL是不可能的,您必须绕过Linq并直接访问数据库。在功能上,它应该实现相同的结果,即执行选择,然后插入数据 - 但它将往返于服务器和客户端之间传输数据,因此对于大量数据可能不是最优的选择。
context
.TableA
.InsertAllOnSubmit(
context
.TableB
.Where( ... )
.Select(b => new A { ... })
);