将Insert into Select翻译为Entity Framework中的操作

7

我有一个SQL查询,想要将其翻译成Entity Framework。

我需要在Entity中进行一次运行插入多行,就像这个查询所做的那样。

INSERT INTO dbo.tbllistDepartment
(
    department_sys_id,
    department,
    status,
    client_sys_id,
    lang_sys_id
)
SELECT @siDepartmentSysId,@siDepartment, @iiStatus, 
       @siClientSysId,  lang_sys_id
  FROM tblLanguageSettings 
  WHERE lang_sys_id <> 'Admin001' 

我尝试过这个方法,但它只插入了一行数据。
public static void Insert(string langSysId, string clientSysId,string name, int status)
    {
        Crs2Model context = new Crs2Model();
        string SysId = MyLibrary.StringCreator.GetSysId();

        tblListDepartment deptObj = new tblListDepartment()
        {
            department_sys_id = SysId,
            client_sys_id = clientSysId,
            lang_sys_id=langSysId,
            department=name,
            status=status
        };

        context.tblListDepartments.Add(deptObj);
        context.SaveChanges();
    }

1
展示一下你的DBContext名称,我的朋友。 - Tomato32
我的问题已经更新。 - Ahmad A. Al-Dwairi
2个回答

8
首先,您需要从 tbllistDepartment 表中筛选数据。然后遍历这些数据。 以下是一个示例,您可以参考,我的朋友:
using (DBContext ctx = new DBContext())
{     

  var department = ctx.tbllistDepartment.Where(c => c.lang_sys_id != "Admin001");   

    foreach(var item in department)
{
      var obj = new tbllistDepartment()
      {
         department_sys_id = item.department_sys_id,
         department = item.department,
         status = item.status,
         client_sys_id = item.client_sys_id,
         lang_sys_id = item.lang_sys_id
      }
      ctx.tbllistDepartment.Add(obj);
}   

  // Insert into the database.
  ctx.SaveChanges();                        
}

1
非常感谢你,我的朋友,这解决了我的问题...但愿我有15个声望,这样我就可以投票支持你 :) - Ahmad A. Al-Dwairi
@AhmadA.Al-Dwairi:是的,很高兴能帮助你,我的朋友 :)) - Tomato32
@AhmadA.Al-Dwairi:谢谢你,我的朋友。你信守承诺,给我投票:))。但是我不知道为什么有人给我的回答点“踩”。 - Tomato32

2

添加到您的类中:

using Microsoft.EntityFrameworkCore;

您可以使用以下命令:
_context.Database.ExecuteSQLCommand (sqlcommand,[parameters]);

以下是相关命令:

string sqlCommand = "INSERT INTO dbo.tbllistDepartment (department_sys_id,department,status,client_sys_id,lang_sys_id) SELECT {0},{1},{2}, {3},{4} FROM tblLanguageSettings WHERE lang_sys_id <> {5}";    
_context.Database.ExecuteSqlCommand(sqlCommand, @siDepartmentSysId,@siDepartment,@iiStatus, @siClientSysId, lang_sys_id,'Admin001');

那么,只用 Linq 就做不到了,是这样吗? - kewur
如果您的表格发生更改,这是很危险的。通常,在更新表格后,您会收到编译错误。 - Bluebaron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接