linq从另一个结果集中排除

时间:2014-11-17 07:01:18

标签: linq entity-framework linq-to-sql

在我的第一行代码中,我将获得所有可用的表单。

在第二行代码中,我收到了所有已签名的表格。

  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'

毫无疑问我说错了,但我不确定在哪里。

1 个答案:

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