2012-05-29 13 views
5

Innerhalb meiner Kontextdatei habe ich eine Viele-zu-viele-Beziehung zwischen meiner Standortklasse und Programmklasse eingerichtet.Abfrage viele zu viele und bedingte Wo

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 

      modelBuilder.Entity<Location>() 
      .HasMany(u => u.Programs) 
      .WithMany(r => r.Locations) 
      .Map(m => 
      { 
       m.ToTable("LocationsPrograms"); 
       m.MapLeftKey("LocationId"); 
       m.MapRightKey("ProgramId"); 
      }); 

     } 

Ich erstelle ein Such-/Filterformular, wo der Benutzer in der Lage sein muss, die Standorte durch Auswahl eines Programms zu filtern.

Mein Gedanke war, die Junction (M2M) -Tabelle abzufragen und dann diese mit der Standorttabelle zu verbinden.

Das Problem ist, dass ich keine Klasse habe, die die M2M-Tabelle anders als in meiner OnModelCreating-Methode darstellt.

Kann ich ein Beispiel dafür bekommen?

Grundsätzlich select * from Standorten l beitreten locationsprograms lp auf l.LocationId = lp.locationid und lp.programid = was auch immer in geben wurde.

Danke.

Antwort

5
var locations = dbContext.Locations 
    .Where(l => l.Programs.Any(p => p.ProgramId == whateverWasPassedInId)) 
    .ToList(); 

Oder (funktioniert, weil Ihr von der Primärschlüsseleigenschaft von Program sind Filterung):

var locations = dbContext.Programs 
    .Where(p => p.ProgramId == whateverWasPassedInId) 
    .Select(p => p.Locations) 
    .SingleOrDefault();