.net “怎么做?”;插入表1(…)从表2中选择(…)”;在林克?

.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

如何编写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 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,每行一个命令。