LINQ-to-SQL相当于Insert ...选择......来自......?

时间:2009-11-25 18:33:49

标签: sql linq linq-to-sql

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

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

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

4 个答案:

答案 0 :(得分:3)

不,即使您使用insertAllOnSubmit并使用select赋予它IQueryable,它仍然会生成多个insert命令。

有人制造了类似的东西,但我手边没有链接(这将从sql生成插入)。也就是说,如果你有一个简单的要求,我只是直接发送sql查询。

答案 1 :(得分:1)

弗雷迪是对的。

在简化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以避免命名冲突......

答案 2 :(得分:1)

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

兰迪

答案 3 :(得分:0)

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