簡體   English   中英

使用linq的自引用聯接

[英]self referential join using linq

我的數據庫有一個students表:

StudentID int PK
StudentName varchar
FamilyID int (Nullable)

如果學生在數據庫中有兄弟姐妹,他們將共享一個familyID。 如果學生沒有兄弟姐妹,familyID應該為null。

使用Linq(給定StudentID),如何返回包含學生及其所有兄弟姐妹(如果有)的列表?

一個joininto應該做的伎倆。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM