我正在使用linq-to-sql在数据库中的处方表和患者呼叫患者列表列表之间创建连接。
假设该表和列表包含一个名为PatientID的int,我将用它来创建联接以按过去的处方状态过滤患者列表。
我正在使用where子句进行挑战。处方的状态范围从1到6.每位患者可以有许多不同的处方。我正在寻找从患者列表中删除处方具有某些状态的患者。我希望所有患者至少有一个处方状态为5,但从未处于状态4和6,而状态1,2,3可以得到。因此,例如患有预备a)3,1,5,3,2或b)3,5,5,1,3的患者可以,但c)2,1,5,6,2或d)1,3, 4,2,1不合适,因为第一个包含6而第二个没有5。
这是我到目前为止所做的:
var TheOutput = from patients in PatientList
join prescrip in MyDataContext.Prescriptions on
patients.PatientID equals prescrip.PatientID
where prescrip.PrescripStatus == 5 &&
我被困了,因为如果我这样做,我会有案例c)结果确定。
感谢您对此查询问题的建议。
答案 0 :(得分:0)
所以,你想要所有患有5但不是4或6的患者。
我不确定是否需要加入。你只想回归病人,对吧?
我会尝试这样的事情:
var TheOutput = (from patients in PatientList
where (from prescrips in MyDataContext.Prescriptions
where prescrips.PatientID = patients.PatientID
&& prescrips.PrescripStatus == 5
select prescrips).Any()
&&!(from prescrips in MyDataContext.Prescriptions
where prescrips.PatientID = patients.PatientID
&& (prescrips.PrescripStatus == 4 || prescrips.PrescripStatus == 6)
select prescrips).Any()
select patients);
答案 1 :(得分:0)
尝试这样的事情
var TheOutput = from patients in PatientList
join prescrip in MyDataContext.Prescriptions on
patients.PatientID equals prescrip.PatientID
join patients2 in PatientList on
patients.PatientID equals patients2.PatientID
join prescrip2 in MyDataContext.Prescriptions on
patients2.PatientID equals prescrip2.PatientID
where (prescrip.PrescripStatus == 5 && (prescrip2.PrescripStatus != 4 && prescrip2.PrescripStatus != 6))