是否可以在单个命令中在LINQ to SQL中执行此操作?
/* Hello, everyone */
Insert into Messages (
Message,
ContactID
)
Select
Message='Hello',
ContactID=ContactID
From Contacts
(我知道我可以多次遍历Contacts,InsertOnSubmit和最后的SubmitChanges;但这会为每个联系人生成一个Insert命令,并且每次都重复消息文本;它笨重且速度较慢。)
答案 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。