2009-11-25 41 views
1

是否可以在单个命令中使用LINQ to SQL来执行此操作?LINQ-to-SQL等同于插入...选择...从...?

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

(我知道我可以通过联系人迭代,InsertOnSubmit很多次,并在最后的SubmitChanges;但这产生一个插入每接触式命令,并在每次重复消息文本;它是体积大和慢)

回答

1

弗雷迪是对的。

就简化Linq而言,您要查找的是InsertAllOnSubmit(),如下所示,但对于不生成一吨插入语句而言,Linq to SQL目前是不足的。

InsertAllOnSubmit避免编码循环:

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

我改变了信息给MessageText中,以避免命名冲突......

+0

谢谢,这很有帮助。 – 2009-11-25 19:16:28

3

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

有人做了这样的事情,但我手边没有链接(它会从sql生成插入)。也就是说,如果你有一个简单的要求,我只是直接发送该SQL查询。

1

你可以尝试选择语句的结果存储到一个列表,然后调用InsertAllOnSubmit(列表)。

兰迪

0

作为一种替代方式,如果你不使用的客户端对象,你可以尝试使用DataContext.ExecuteCommand。