我是 LINQ 的新手,正在努力寻找如何执行以下操作。
我有一个具有 sql server 后端的系统,它使用 EF5 与数据库进行交互。我有以下表格
Case
CaseStatus
Status
CaseAction
ActionType
关系是...
Case (1 - many) CaseStatus
CaseStatus (1 - many) CaseAction
Status (1 - many) CaseStatus
ActionType (1 - many) CaseAction
我需要显示一个案例记录列表,其中包括最新状态(基于与案例相关的最后一个 CaseStatus 记录)和最新的操作记录(基于与与案例相关的最新 CaseStatus 记录相关的最新 CaseAction 记录)
所有案例都至少有 CaseStatus 记录,但并非所有 CaseStatus 记录都有相关的 CaseAction 记录。在这些情况下,我仍然需要显示案例记录中的一些详细信息,但我会将操作列留空
在 T-SQL 中,这就是我想要的东西
select
c.ID CaseID
,cs1.Name CurrentStatus
,cs1.Date StatusDate
,ca1.Name LatestAction
,ca1.Date ActionDate
from
[Case] c
left join
--Latest CaseStatus record to get current status of case
(
select
cs.ID
,cs.CaseID
,s.Name
,cs.Date
,ROW_NUMBER() over (partition by caseid order by cs.id desc) rn
from
CaseStatus cs
--Join to status to get the name of the statusID
inner join Status s on cs.StatusID=s.ID
) cs1
on c.ID=cs1.CaseID and cs1.rn=1
left join
--Latest CaseAction on the case
(
select
ca.CaseStatusID
,at.Name
,ca.Date
,ROW_NUMBER() over (partition by casestatusID order by ca.id desc) rn
from
CaseAction ca
inner join ActionType at on ca.ActionTypeID=at.ID
) ca1
on ca1.CaseStatusID=cs1.ID and ca1.rn=1
我知道将数据导入应用程序可以做的一件事是在我的 EF 模型中包含包含此 SQL 的视图。
出于学习的目的,我想要的是能够使用 LINQ 获得相同的结果。如果可能的话,我真的很想看看使用综合语法和扩展方法语法的例子
提前感谢您的任何帮助