LINQ 查询加入两个集合并过滤结果集
LINQ query to join two sets and filter on the result set
我有两个table
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会return3条记录导致一个用例下面失败。
。假设我只有一所学校 School2 ,
那么 Student table 中会有 2 行
- 作为 ID 为 3 的学生排成一排,并且
另一个是 ID 为 4 的老师。
即使在这种情况下,我也会得到 a.Count 作为 1,这是不正确的,因为我的问题陈述是“If Atleast one School which doesn't老师 return 正确”。我该如何解决?
您可以在 join
之前通过 schoolId
对 students
进行分组,我为 Linq to Object
尝试了此代码,并且效果很好:
1 - 为学生建立分组学校,并检查 school
in students
中的每个 IsATeacher
是否都是 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;
希望对您有所帮助
我有两个table
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会return3条记录导致一个用例下面失败。
。假设我只有一所学校 School2 , 那么 Student table 中会有 2 行 - 作为 ID 为 3 的学生排成一排,并且 另一个是 ID 为 4 的老师。
即使在这种情况下,我也会得到 a.Count 作为 1,这是不正确的,因为我的问题陈述是“If Atleast one School which doesn't老师 return 正确”。我该如何解决?
您可以在 join
之前通过 schoolId
对 students
进行分组,我为 Linq to Object
尝试了此代码,并且效果很好:
1 - 为学生建立分组学校,并检查 school
in students
中的每个 IsATeacher
是否都是 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;
希望对您有所帮助