.net “怎么做?”;插入表1(…)从表2中选择(…)”;在林克?
如何编写LINQ到SQL的等价物:.net “怎么做?”;插入表1(…)从表2中选择(…)”;在林克?,.net,linq-to-sql,.net,Linq To Sql,如何编写LINQ到SQL的等价物: INSERT INTO Table1 (field1, field2, field3) SELECT field1, field2, field3 FROM Table2 WHERE (field1= @field1) 谢谢LINQ是一种查询语言,所以它不进行更新或插入。但是,LINQ到SQL实体对象模型具有处理CUD的方法: using(MyDataContext dc = new MyDataContext()) { //select the s
INSERT INTO Table1 (field1, field2, field3)
SELECT field1, field2, field3
FROM Table2
WHERE (field1= @field1)
谢谢LINQ是一种查询语言,所以它不进行更新或插入。但是,LINQ到SQL实体对象模型具有处理CUD的方法:
using(MyDataContext dc = new MyDataContext())
{
//select the source entities from Table2
var Table2Entities = (from e in dc.Table2 where e.Field1 == "value" select e);
//for each result, create a new Table1 entity and attach to Table1
Table2Entities.ForEach(t2e => dc.Table1.InsertOnSubmit(
new Table1Entity {
Field1 = t2e.Field1,
Field2 = t2e.Field2,
Field3 = t2e.Field3
});
//submit the changes
dc.SubmitChanges();
}
这里真正的区别在于,它需要两个单独的SQL事务,而不是一个—一个选择,一个插入。由于您不返回任何结果,只需使用低级的
DataContext.ExecuteCommand()
方法:
using (MyDataContext dc = new MyDataContext())
{
dc.ExecuteCommand(@"
INSERT INTO Table1 (field1, field2, field3)
SELECT field1, field2, field3
FROM Table2
WHERE (field1= {0})
",
field1);
}
如果两个表的字段相同, 使用
insert into table 1从table 2中选择*,其中table 2.field1='xyz'代码>
代替:
INSERT INTO Table1 (field1, field2, field3)
SELECT field1, field2, field3
FROM Table2
WHERE (field1= @field1)
您是否有任何文档来支持所有插入都发生在一次往返中的断言?@Adam nope。只有我的记忆,它经常是错误的。我会把那一块去掉,直到它被清理干净为止。谢谢@Adam,SQL探查器工具将阐明LINQ to SQL如何与数据库服务器通信,是衡量性能以及LINQ构造查询和批处理的好方法。@David:是的,没错。我现在不在工作,所以无法访问它,我(可能不正确)的假设是LINQ的数据访问层像ADO一样处理SQL,每行一个命令。