【问题标题】:Insert/Select with Linq-To-SQL使用 Linq-To-SQL 插入/选择
【发布时间】:2010-01-17 12:18:03
【问题描述】:

有没有办法用 Linq 进行插入/选择,转换成这个 sql:

INSERT INTO TableA (...)
SELECT ...
FROM TableB
WHERE ...

【问题讨论】:

    标签: linq-to-sql select insert


    【解决方案1】:

    是的@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(到 SQL)生成,您必须绕过 linq 并直接进入数据库。从功能上讲,它应该实现相同的结果,因为它将执行选择,然后插入数据 - 但它将数据从服务器到客户端并返回,因此对于大量数据可能不是最佳的。

    【讨论】:

    • 这不会转换为问题中指定的 SQL 语句。它将选择 TableB 中的给定条目,并在 TableA 中生成一堆插入语句。它似乎做同样的事情,但不是给定 SQL 的直接翻译。
    • @JfBeaulac 我会修改帖子。
    【解决方案2】:
    context
      .TableA
      .InsertAllOnSubmit(
        context
          .TableB
          .Where( ... )
          .Select(b => new A { ... })
      );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多