【问题标题】:LINQ-to-SQL equivalent to Insert ... Select ... From ...?LINQ-to-SQL 等效于 Insert ... Select ... From ...?
【发布时间】:2009-11-25 18:33:48
【问题描述】:

是否可以在 LINQ to SQL 中通过单个命令执行此操作?

/* Hello, everyone */
Insert into Messages (
   Message,
   ContactID
) 
Select 
   Message='Hello',
   ContactID=ContactID
From Contacts 

(我知道我可以遍历 Contacts、InsertOnSubmit 多次,最后是 SubmitChanges;但这会为每个联系人生成一个 Insert 命令,并且每次都重复消息文本;它体积庞大且速度较慢。)

【问题讨论】:

    标签: sql linq linq-to-sql


    【解决方案1】:

    不,即使您使用 insertAllOnSubmit 并通过 select 为其提供 IQueryable,它仍然会生成多个插入命令。

    有人做了类似的事情,但我手头没有链接(它将从 sql 生成插入)。也就是说,如果你有一个简单的需求,我会直接发送那个 sql 查询。

    【讨论】:

      【解决方案2】:

      弗雷迪是对的。

      就简化 Linq 而言,您正在寻找的是如下所示的 InsertAllOnSubmit(),但就不生成大量插入语句而言,Linq to SQL 目前是有缺陷的。

      InsertAllOnSubmit 以避免编码循环:

      var selquery = from c in Contacts 
                     select new Message 
                     { 
                       MessageText = "Hello", 
                       ContactID = c.ContactID 
                     };
      Messages.InsertAllOnSubmit(selquery);
      

      我将 Message 更改为 MessageText 以避免命名冲突...

      【讨论】:

        【解决方案3】:

        您可以尝试将 Select 语句的结果存储到 List 中,然后调用 InsertAllOnSubmit(List)。

        兰迪

        【讨论】:

          【解决方案4】:

          作为替代方法,如果您不使用客户端对象,则可以尝试使用 DataContext.ExecuteCommand。

          【讨论】:

            猜你喜欢
            • 2014-12-12
            • 1970-01-01
            • 2011-01-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多