C# 根据子表中的某些属性筛选器获取父实体

C# 根据子表中的某些属性筛选器获取父实体,c#,entity-framework,linq,filter,C#,Entity Framework,Linq,Filter,我想获取签名表中没有任何内容的所有父项 (Roleid 1或Roleid 2或Roleid 3)且SignatureStatus为空 RoleId-int:0-13 SignatureStatus-位:真、假、空 我有这个代码,但我仍然在不应该的时候得到了家长,在应该的时候没有得到 result = Context.APP_AuthorityHasamaForm.Where(x => x.UpdateTypeId == (int)UpdateType.Un

我想获取签名表中没有任何内容的所有父项

(Roleid 1或Roleid 2或Roleid 3)且SignatureStatus为空

RoleId-int:0-13
SignatureStatus-位:真、假、空

我有这个代码,但我仍然在不应该的时候得到了家长,在应该的时候没有得到

 result = Context.APP_AuthorityHasamaForm.Where(x =>
                x.UpdateTypeId == (int)UpdateType.Unit && x.AuthorityNum == authorityUnit.AuthorityNum &&
                x.InsertDate >= authorityUnit.FromDate && x.HasamaFormStatus == (int)Status.Valid &&
               !(x.APP_SignatureAuthorityHasamaForm.Any(s =>
                    s.RoleId == (int)Role.EligibilityWorker1 || s.RoleId == (int)Role.DepartmentManager2 ||
                    s.RoleId == (int)Role.Treasurer3 && ((bool)s.SignatureStatus || !(bool)s.SignatureStatus)))).ToList();

我没有您的类结构,但这里有一些修复,将括号置于或条件之外,并使用.HasValue检查非null:

.Any(s =>
     (s.RoleId == (int)Role.EligibilityWorker1 || s.RoleId == (int)Role.DepartmentManager2 ||
         s.RoleId == (int)Role.Treasurer3) && ((bool)s.SignatureStatus.hasValue).ToList();

把它改成这个怎么样

!(x.APP_SignatureAuthorityHasamaForm.Any(s =>
    (s.RoleId == (int)Role.EligibilityWorker1 || s.RoleId == (int)Role.DepartmentManager2 ||
    s.RoleId == (int)Role.Treasurer3) && s.SignatureStatus.HasValue))).ToList();

signatureStatus可以为空吗?是的,signatureStatus可以为空你试过了吗!s、 SignatureStatus.HasValue?在你提到它之后,我现在就尝试它,但仍然有些东西不起作用。即使我有一个只有(roleid4)的签名,我仍然不能得到父表。如果我有roleid1-3,我就不能得到父表,即使signatureStatus为空