在我的第一行代码中,我将获得所有可用的表单。
在第二行代码中,我收到了所有已签名的表格。
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)'的最佳重载方法匹配具有一些无效参数
我的第二次尝试:
var test2 = from y in AllForms
where !(from x in SignedForms
where x.FormSigned==x.ClinicForm.Id && x.PatientId==patientId
select x.ClinicForm).Contains(y.Id)
select y;
错误5实例参数:无法从'System.Collections.Generic.IEnumerable'转换为'System.Linq.IQueryable'
毫无疑问我说错了,但我不确定在哪里。
答案 0 :(得分: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);