需要帮助服务堆栈或mLite 如何使用多联接表更新表实体框架 C#
本文关键字:更新 实体 框架 何使用 服务 帮助 堆栈 mLite | 更新日期: 2024-11-07 17:02:01
>我需要服务堆栈专家的帮助,以便在 C# 中使用连接多个表进行服务堆栈更新查询。 我已经用谷歌搜索并浏览了所有相关文档和网站,但无法找到有关使用加入查询更新的足够详细信息。
我想通过连接三个不同的表和 where 子句来更新一个表。我已经通过实体框架尝试了所有方法,但无法做到。我可以通过Db.ExecuteSql(SqlQuery)来做到这一点,但我想通过实体框架来做到这一点。我的查询如下。
我想更新心率表的更新状态与患者详细信息、设备会话、患者会话和心率表的连接,其中子句是 HeartRate.timestamp = '@starttime' 和 PatientId = '@PatientId'
SqlQuery =
UPDATE HeartRate SET UpdateStatus = 1
WHERE HeartRateID IN ( SELECT hr.HeartRateID
FROM PatientDetails pd join PatientSession ps on pd.PatientDetailsId = ps.ByPatientId
join DeviceSession ds on ps.PatientSessionId = ds.ByPatientSessionId join HeartRate hr on ds.DeviceSessionID = hr.ByDevSessionID
WHERE
pd.PatientId = '@PatientId'
AND
hr.Timestamp = '@starttime'
order by hr.Timestamp Asc )
我需要下面这样的东西(它是错误的和不完整的)。
Db.UpdateOnly(
new HeartRate { UpdateStatus = 1 },
ps => new { ps.UpdateStatus },
.SqlJoinBuilder<DeviceSession, PatientSession>((ds2, ps) => ds2.ByPatientSessionId == ps.PatientSessionId)
.Join<PatientSession, PatientDetails>((ps2, pd) => ps2.ByPatientId == pd.PatientDetailsId)
.Where<HeartRate, PatientDetails>((lthr2, pd2) => (lthr2.Timestamp == @starttime) && pd2.PatientId == PatientId)
.OrderBy(lthr2 => lthr2.Timestamp));
请帮帮我。
谢谢
苏希尔
//试试这个
var model = from v in Db.HeartRate
where
(
from pd in Db.PatientDetails
join ps in Db.PatientSession on pd.PatientDetailsId equals ps.ByPatientId
join ds in Db.DeviceSession on ps.PatientSessionId equals ds.ByPatientSessionId
join hr in Db.HeartRate on ds.DeviceSessionID equals hr.ByDevSessionID
where pd.PatientId == PatientId && hr.Timestamp == starttime
select new { HeartRateID = hr.HeartRateID }
).ToList().Contains(v.HeartRateID)
select v;
foreach (var item in model)
{
item.UpdateStatus = 1;
Db.SaveChanges();
}