我有两个桌子
School
ID Name
1 School1
2 School2
Student
ID SchoolID IsAStudent IsATeacher
1 1 1 0
2 1 1 0
3 2 1 0
4 2 0 1
public class School
{
public int ID {get;set;}
public string Name {get;set;}
}
我有一个List<School> school= new List<School>();
输入:
School s1 = new School() { ID =1 ,Name ="School1"};
School s2 = new School() {ID= 2, Name = "School2"};
school.Add(s1);
school.Add(s2);
此列表包含ID为1和2的学校。
预期输出:
我需要检查其中一所学校是否至少没有老师。
在我们的示例中,由于 School1 没有老师,我应该从以下功能中得到 true :
public bool IsTeacherNotPresentAtleastInOneSchool(List<School> school)
{
var a = (from b in school
join c in _studentEntity.GetAll()
on b.ID equals c.SchoolID
where c.IsATeacher == false
select b).ToList();
if(a.Count >0)
return true;
else
return false;
}
尽管上述用例将通过,但 a.Count 将返回 3 条记录,这将导致以下一个用例失败。
。假设我只有一所学校与 School2 , 那么学生表中将有2行 -作为学生的ID为3的一行,以及 另一个是ID为4的老师。
即使在这种情况下,我也会得到 a.Count 为1,这是不正确的,因为我的问题陈述是“ 如果没有老师的Atleast一所学校返回了真” 。我该如何解决?
答案 0 :(得分:1)
您可以在students
之前将schoolId
按join
分组,我为Linq to Object
尝试了此代码,一切正常:
1-为学生建立分组学校,并检查IsATeacher
中每个school
的所有students
是否都是false
var groupedSchool = _studentEntity.GetAll()
.GroupBy(x => x.SchoolID)
.ToDictionary(k => k.Key, v => v.All(x => !x.IsATeacher));
结果1 :
SchoolID IsDontHasTeacher
1 true
2 false
2-将现有的Query
更改为:
var a = (from b in schools
join c in groupedSchool
on b.ID equals c.Key
where c.Value == true
select b).ToList();
return a.Count > 0;
我希望有帮助