2012-05-29 13 views
5

W moim pliku Context ustawiłem wiele do wielu relacji między moją klasą lokalizacji a klasą programu.Wywoływanie wielu do wielu i warunkowe Gdzie

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"); 
      }); 

     } 

Tworzę formularz wyszukiwania/filtrowania, w którym użytkownik będzie musiał filtrować lokalizacje, wybierając program.

Moja myśl polegała na wysłaniu zapytania do tabeli skrzyżowań (M2M), a następnie do dołączenia do tej kopii z tabelą lokalizacji.

Problem polega na tym, że nie mam klasy reprezentującej tabelę M2M, inną niż w mojej metodzie OnModelCreating.

Czy mogę uzyskać przykład, jak to zrobić?

Zasadniczo select * from lokalizacją l dołączyć locationsprograms lp na l.LocationId = lp.locationid i lp.programid = cokolwiek zostało przekazane w.

Dziękuję.

Odpowiedz

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

Albo (działa, ponieważ Twój są filtrując przez kluczowego majątku pierwotnym Program):

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