加入多个标准

时间:2011-08-11 15:57:45

标签: c# linq linq-to-sql

我正在使用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)结果确定。

感谢您对此查询问题的建议。

2 个答案:

答案 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))