2016-05-28 15 views
0
select * 
from Enfants 
where Enfants.id in 
(
    select EnfantParents.Enfant_Id 
    from EnfantParents 
    where EnfantParents.Parent_Id in 
    (
     select parents.Id 
     from Parents 
     where Parents.Id in 
     (
      select Reservations.ParentId 
      from Reservations 
      where Reservations.CrecheId = 1 
     ) 
    ) 
) 

EnfantParentsは非表示のテーブルです。Linqで演算子 'IN'を使用してクエリを変換します

私はEnfantsの*-----*両親1-----*予約

はありがとうございました。

+0

[in演算子のLINQ]の可能な重複(http://stackoverflow.com/questions/8043151/linq -in-operator) –

+0

この場合はINを使用する必要さえないと私は思います。クラスを正しくモデリングする場合、ナビゲーションプロパティを使用してクエリを作成することができ、そのようなクエリはSQL JOINに変換されます。あなたはナビゲーション特性を持っていますか?エンティティクラスを表示できますか? –

+0

私はSQLでは、このクエリはLINQで 'Any'を使うのと同じである' EXISTS'を使ったとき、より良い実行計画を持っていると思います。 –

答えて

1

EnfantParentsはあなたのEnfantエンティティはParentsナビゲーションプロパティを持っており、あなたのParentエンティティはReservationsナビゲーションプロパティを持つ、隠されたテーブルの上から

私はあなたが自動「リンク」テーブルでEFを使用していると仮定しています。

次に、あなたはこのようなLINQクエリとSQLクエリと同じ結果を得ることができます:

var query = db.Enfants 
    .Where(e => e.Parents.SelectMany(p => p.Reservations).Any(r => r.CrecheId == 1)); 
+0

ありがとう、イワン。 – Mercenaire

関連する問題