使用Linq-To-SQL进行插入/选择操作

7
有没有一种使用Linq进行插入/选择的方法,可以将其转换为这个SQL语句:
INSERT INTO TableA (...)
SELECT ...
FROM TableB
WHERE ...
2个回答

9

是的,@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并直接访问数据库。在功能上,它应该实现相同的结果,即执行选择,然后插入数据 - 但它将往返于服务器和客户端之间传输数据,因此对于大量数据可能不是最优的选择。


3
这段代码无法直接转换成问题中指定的SQL语句。它会选择TableB中给定的条目,并生成一堆插入语句到TableA中。虽然这看起来做了同样的事情,但并不是对给定SQL的直接翻译。 - Jf Beaulac
@JfBeaulac 我会修改帖子的。 - Murph

1
context
  .TableA
  .InsertAllOnSubmit(
    context
      .TableB
      .Where( ... )
      .Select(b => new A { ... })
  );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接