Frage

Ich habe eine Situation, in der ich einige Entitäten durch eine viele zu viele Beziehung vorlegen muss. Es ist also wie der Klassiker BlogPost <- BlogPostTag -> Tag Lage.

Ja, ich bin mir der Loadoptionen bewusst, kann sie aber nicht verwenden, da es sich um eine Webanwendung handelt und ich den einen DataContext pro Anforderungsmuster verwende.

Es scheint auch, dass Sie keine Projektion verwenden können, um viele zu viele Beziehungen vorzubereiten. Ja? Nein?

Ich möchte zurückkehren IQueryable<Tag> Basierend auf einer Reihe von Blogs. Das Beste, was ich tun kann, ist, es zurückzukehren IQueryable<IEnumerable<Tag>> durch Folgendes:

public IQueryable<Tag> GetJobsCategories(IQueryable<BlogPost> blogPosts)
{
    var jobCats = from bp in blogPosts
                  select bp.BlogPostTags.Select(x => x.Tag);

    return jobCats;
}

Kann ich das verflachten? Vermisse ich etwas Offensichtliches? Gibt es einen anderen Ansatz, den ich ergreifen kann?

Und nein, ich kann nicht orms ändern ;-)

War es hilfreich?

Lösung

Dies wird funktionieren, Sie können einfach in der Linq -Abfrage einbohren

public IQueryable<Tag> GetJobsCategories(IQueryable<BlogPost> blogPosts)
{
    return from bp in blogPosts
           from tag in bp.BlogPostTags
           select tag;
}

Wenn Sie die Methode als solche deklarieren:

public static IQueryable<Tag> GetJobsCategories(this IQueryable<BlogPost> blogPosts)

Sie können es als Erweiterungsmethode für Abfragen verwenden. Zum Beispiel

myContext.BlogPosts.GetJobsCategories()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top