Ręcznie wybierz powiązane dane tabeli (SELECT N + 1 problem) LINQ to SQL

Przykład bazy danych:

Obraz - ImageTag - Tag

Obrazy mogą mieć wiele tagów. Relacje są dobrze skonfigurowane, ale mam problemy z wydajnością.

Mam wiele różnych zapytań, które wybierają obrazy według różnych kryteriów. Działają dobrze, jednak dane dla znaczników nie są wybierane w tych zapytaniach.

Oznacza to, że jeśli przeglądam listę 10 obrazów i próbuję uzyskać dostęp do ich obiektów znaczników (za pomocą ImageTag), to w mojej bazie danych wykonywane jest nowe zapytanie dla każdego obrazu.

<%foreach (LINQRepositories.Image i in Model)
  { %>

   <li><%=i.title%>
    <ul>
        <%foreach(ImageTag t in i.ImageTags){ %>
            <li><%=t.Tag.name%></li>
        <%} %>
    </ul>
   </li> 

<%} %>

To oczywiście nie jest idealne. Czy istnieje sposób zmuszenia LINQ do SQL do zapytania o określone dane?

Oto przykład jednego z moich zapytań

public static IQueryable<Image> WithTags(this IQueryable<Image> qry, IEnumerable<Tag> tags)
{
    return
        from i in qry
        from iTags in i.ImageTags
        where tags.Contains(iTags.Tag)
        select i;
}
Edytować

Po wypróbowaniu opcji pobierania danych jest to przykładowe zapytanie generowane

{SELECT [t0]. [Id], [t0]. [Tytuł], [t0]. [Legenda], [t0]. [DateAdded], [t0]. [Usunięte], [t0]. [AverageRating], [t0]. [numberOfVotes], [t0]. [imageOfTheWeek], [t0]. [copyright], [t0]. [copyrightText], [t0]. [areaOfInterest], [t0]. [typeId], [t0 ]. [authorId], [t0]. [editorialStatusId], [t0]. [komentarze] FROM [dbo]. [Image] AS [t0] CROSS JOIN ([dbo]. [ImageTag] AS [t1] INNER JOIN [ dbo]. [Tag] AS [t2] ON [t2]. [id] = [t1]. [TagId]) WHERE ([t2]. [id] = @ p0) AND (NOT ([t0]. [usunięte ] = 1)) AND (NOT ([t0]. [Usunięte] = 1)) AND ([t1]. [ImageId] = [t0]. [Id])}

questionAnswers(2)

yourAnswerToTheQuestion