2011-08-11 209 views
1

我正在使用linq-to-sql在db的处方表和患者呼叫PatientList列表之间创建一个连接。加入多个条件

假设表格和列表包含一个名为PatientID的int,我将使用该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

所以,你要的是有一个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); 
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))