を使用して参加:自己参照マイデータベースは、学生のテーブルを持ってLINQ
StudentID int PK
StudentName varchar
FamilyID int (Nullable)
学生は、データベース内の兄弟を持っている場合、彼らはfamilyIDを共有します。生徒に兄弟がいない場合、familyIDはnullにする必要があります。
StudentIDを指定してLinqを使用すると、学生とその兄弟すべて(もしあれば)を含むリストを返すことができますか?
を使用して参加:自己参照マイデータベースは、学生のテーブルを持ってLINQ
StudentID int PK
StudentName varchar
FamilyID int (Nullable)
学生は、データベース内の兄弟を持っている場合、彼らはfamilyIDを共有します。生徒に兄弟がいない場合、familyIDはnullにする必要があります。
StudentIDを指定してLinqを使用すると、学生とその兄弟すべて(もしあれば)を含むリストを返すことができますか?
あなたがトリックを行う必要がありますinto
とこの
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
ような何かを行うことができます。
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
を得るために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の家族を探しています。この答えは、一度に1つの家族だけを探しているという仮定に基づいており、すべての家族のリストではありません。
これはコンパイルされません。私は "名前が現在のコンテキストに存在しない"ということを得る。 – Aheho
エラーは、次の節のsを参照しています。(x => x.StudentID!= s.StudentID) – Aheho