更新内连接数据

Update inner join data

从上一个问题 .

我正在使用 DTO 方法来内部联接数据。现在是否可以在我的合并结果中更新数据?数据将如何更新回原点 table 应该在哪里?

要求:

目前我根据ID成功加入了员工部门table ]. 我根据 shift_id.

加入了 employeeworkingshifts

内连接查询在这里:

from e in DSE.employees
join d in DSE.departments on e.department_id equals d.department_id
join ws in DSE.workingshifts on e.shift_id equals ws.shift_id

所以数据在这里:

[{"FirstName":"gg","LastName":"wp","Gender":"NoGender","Salary":8,"Department_id":1, 
   "Department_Name":"RND","Shift_id":"B","Duration":"afternoon"}]

现更新信息如下:

FirstName: good game
LastName: well played
Gender: IGender
Salary: 8888
Shift_id: A
Duration: Morning

我可以知道在我的 C# 和 Linq 中应该完成什么代码吗?它会更新回我的数据库 tables 吗? 此外,我听说过使用 SQL 存储过程的解决方案,您也可以向我展示这种方法

好吧,根据您的评论。 SQL 基于连接更新值的服务器是

UPDATE e
    SET e.FirstName = 'good game',
    e.LastName = 'well played'
FROM employees e
    INNER JOIN departments d ON d.department_id = e.department_id
    INNER JOIN workingshifts ws ON e.shift_id equals ws.shift_id
WHERE e.FirstName = 'gg'
    AND e.LastName = 'wp'

在不知道表的结构的情况下,我简单地使用了 INNER JOIN

可以找到 Entity Framework 执行此操作:

var result = (from e in DSE.employees
              join d in DSE.departments on e.department_id equals d.department_id
              join ws in DSE.workingshifts on e.shift_id equals ws.shift_id
              where e.FirstName == "gg"
              && e.LastName == "wp"
              select e).FirstOrDefault()    // As it seems like we are just wanting employees however if you are expecting to return more than one employee back, you could use .ToList() instead of .FirstOrDefault()

if(result != null)
{
    result.FirstName = "Good Game";
    result.LastName = "Well Played";
    await context.SavechangesASync();   // If inside an async function, else just SaveChanges()
}

这只是在您 return 聘请一名员工的情况下。正如我所说,如果您要 return 创建一个列表,则需要将更改合并到上面的代码中。通过以上内容,您还需要对结果集执行 where 操作 return 您想要的值

编辑:在 Entity Framework 方法

中将 ' 更改为 "