我的数据库中有一个学生表:自我指涉加入使用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