[英]self referential join using linq
我的數據庫有一個students表:
StudentID int PK
StudentName varchar
FamilyID int (Nullable)
如果學生在數據庫中有兄弟姐妹,他們將共享一個familyID。 如果學生沒有兄弟姐妹,familyID應該為null。
使用Linq(給定StudentID),如何返回包含學生及其所有兄弟姐妹(如果有)的列表?
一個join
與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,
};
您可以添加query.FirstOrDefault(x => s.StudentId == yourStudentId)
以獲取特定的StudentId
使用LinQ方法鏈,這將僅返回兄弟姐妹的列表:
var siblings = students.Where(s => s.FamilyId == students.Single(st => st.StudentId == id).FamilyId).ToList();
或分兩個步驟進行操作,以便您可以檢查學生實例:
var student = students.Single(st => st.Id == id);
var siblings = students.Where(s => s.FamilyId == student.FamilyId).ToList();
你可以做這樣的事情
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>());
}
}
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;
如果我正確理解您的問題。 您正在尋找指定學生證的家庭成員。 該答案基於以下假設:您一次只尋找一個家庭,而不是所有家庭的清單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.