2014-11-17 58 views
0

在我的第一行代碼中,我得到了所有可用的表單。linq從另一個結果集中排除

在第二行代碼中,我得到所有簽名的表單。

IEnumerable<ClinicForm> AllForms = db.ClinicForms.Where 
            (d => d.ClinicId == clinicId); 

    var SignedForms = db.SignedForms.Where 
        (d => d.FormSigned == d.ClinicForm.Id && d.PatientId==patientId); 

兩個代碼做工精細這些行,但我想要做的就是各種形式的不包括任何的簽署表單列表。

我在這裏做了幾次嘗試。

var test = from c in AllForms 
      where !SignedForms.Contains(c.FormName) 
      select c; 

此嘗試導致一個錯誤: 錯誤3的最好重載方法匹配「System.Collections.Generic.List.Contains(SDatabaseLibrary.SignedForm)」具有一些無效參數

我的第二次嘗試:

​​

錯誤5實例參數:無法從轉換 'System.Collections.Generic.IEnumerable' 到 'System.Linq.IQueryable'

毫無疑問,我正在拋出一些錯誤,但我不知道在哪裏。

回答

0

下面是最終工作的解決方案,花了很多擺弄得到它的工作

var AllForms = db.ClinicForms.Where(d => d.ClinicId == clinicId); 

var SignedForms = AllForms.Where(d => d.SignedForm.FormSigned == d.Id 
           && d.SignedForm.PatientId == patientId); 


var res = AllForms.Except(SignedForms);