Załóżmy że mamy następujące klasy:
public class Entity
{
public int EntityID { get; set; }
public String Name { get; set; }
public virtual ICollection<FooBar> FooBars;
}
public class FooBar
{
public int FooBarID { get; set; }
public int Value { get; set; }
public virtual ICollection<Entity> Entities;
}
EF w przypadku tych dwóch klas stworzy jeszcze dodatkową tabelę EntityFooBar (junction table) z tytułu relacji wiele do wielu. Teraz pytanie jest następujące: jak wyglądałoby zapytanie LINQ (w postaci rozszerzeniowej, Where(), Join() itp.) które w wyniku zwracałoby listę w postaci:
EntityID | FooBarID
1 | 1
1 | 2
1 | 3
2 | 3
2 | 4
Czyli w skrócie: listę możliwych kombinacji Entity z FooBarem. Największą trudność sprawia mi zrobienie odpowiedniego joina, ponieważ nie bardzo wiem jak on mógłby wyglądać w przypadku kolekcji a nie pojedynczych ID:
context.Entity.Join(ctx.FooBar, p => p.EntityID, q => q.Entities.?, ...
Można próbować też w drugą stronę, tj.:
context.Entity.SelectMany(p => p.FooBars).?
Z tym że nadal mamy tylko listę FooBarów, bez informacji o powiązanych z nimi Entities.