我的數據庫中有一個學生表:自我指涉加入使用LINQ
StudentID int PK
StudentName varchar
FamilyID int (Nullable)
如果學生有兄弟姐妹在數據庫中,他們將分享FAMILYID。如果學生沒有兄弟姐妹,familyID應該爲空。
使用Linq,給定一個StudentID,如何返回一個包含學生和他所有兄弟姐妹(如果有)的列表?
我的數據庫中有一個學生表:自我指涉加入使用LINQ
StudentID int PK
StudentName varchar
FamilyID int (Nullable)
如果學生有兄弟姐妹在數據庫中,他們將分享FAMILYID。如果學生沒有兄弟姐妹,familyID應該爲空。
使用Linq,給定一個StudentID,如何返回一個包含學生和他所有兄弟姐妹(如果有)的列表?
你可以做這樣的事情
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>());
}
}
一個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,
};
你可以爲了得到一個特定的StudentId
使用LINQ的方法鏈添加一個query.FirstOrDefault(x => s.StudentId == yourStudentId)
,這將返回只有兄弟姐妹的列表:
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();
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的家庭成員。這個答案是基於這樣的假設,即你一次只尋找一個家庭,而不是所有家庭的名單。
這不會編譯。我得到「這個名字」在當前語境中不存在「。 – Aheho 2012-02-22 04:38:35
錯誤指的是以下子句中的s:(x => x.StudentID!= s.StudentID) – Aheho 2012-02-22 04:39:31