2011-12-18 19 views
2

私は以下のように3つのエンティティを持っています。ラムダ式に含まれていないLINQステートメントへの変換

Student { StudentID, Name, Age } 

Parent { ParentID, Name, Age } 

StudentParent { StudentParentID, StudentID, ParentID } 

特定の年齢で、親を持たないIQueryableのリストを取得する必要があります。私は現在、動作する次のコードを使用しています。

IQueryable<Student> Student s = from s in db.Students 
           where s.Age == 18 
           where !(from sp in db.StudentParent where sp.StudentID == s.StudentID select sp.StudentID).Contains(s.StudentID) 
           select s; 

私はこれをラムダ式に変換するのを助けたいと思います。

+0

少し前に尋ねられた同様の質問がありました:http://stackoverflow.com/questions/3739246/linq-to-sql-not-contains-or-not-in。答えはこれまでの回答よりも少し簡潔です。 –

答えて

2

これは動作するはずです:

db.Students.Where(s => 
    s.Age == 18 && db.StudentParent.All(sp => sp.StudentID != s.StudentID) 
); 

編集を:これは、あなたが学生から両親へのリンクを持っていないことを想定しています。その場合は、読みやすくするために結合の代わりに使用してください。

+0

これはうまくいきましたが、小さな変更のみでした。db.Students.Where(s => s.Age == 18 && s.StudentParent.All(sp => sp.StudentID!= s.StudentID) ); –

4

エンティティモデルで関連付けを作成する必要があります。

その後、ORMを使用するときは、(例えば、あなたのStudentParentなど)を明示的に参加し、テーブルを照会する必要はありません

db.Students.Where(s => s.Age == 18 && s.Parents.Count == 0) 

を書くことができます。

関連する問題