我的数据库有一个学生表:
StudentID int PK
StudentName varchar
FamilyID int (Nullable)
如果学生在数据库中有兄弟姐妹,他们将共享一个familyID。如果学生没有兄弟姐妹,则familyID应为null。
使用Linq,给定StudentID,如何返回包含学生及其所有兄弟姐妹(如果有)的列表?
答案 0 :(得分:3)
具有join
的{{1}}应该可以解决问题。
into
您可以添加var query = from s in students
join s2 in students.Where(x => x.StudentId != s.StudentId) on s.FamilyId equals s2.FamilyId into siblings
select new
{
Student = s,
Siblings = siblings,
};
以获取特定的StudentId
答案 1 :(得分:2)
使用LinQ方法链,这将返回仅包含兄弟姐妹的列表:
var siblings = students.Where(s => s.FamilyId == students.Single(st => st.StudentId == id).FamilyId).ToList();
或分2步,这样您就可以对学生实例进行检查:
var student = students.Single(st => st.Id == id);
var siblings = students.Where(s => s.FamilyId == student.FamilyId).ToList();
答案 2 :(得分:1)
你可以做这样的事情
List<Student> lstStd = new List<Student>();
var student = (from s in students
where s.studentid = studentid
select s).FirstOrDefault();
lstStd.Add(student);
if(student!=null)
{
if( student.FamilyId !=null)
{
lstStd.AddRange( (from s in students
where s.FamilyId == student.Familyid
&& s.studentid != student.studentid
select s).ToList<Student>());
}
}
答案 3 :(得分:0)
var sid = 123;
var query = from s in Students
where (from s2 in Students where s2.Id == sid select s2.FamilyId).FirstOrDefault() == s.FamilyId
&& s.FamilyId != null
select s;
如果我正确理解你的问题。您正在寻找指定学生ID的家庭成员。这个答案是基于这样的假设:你一次只找一个家庭,而不是所有家庭的清单。