Frage

Ich habe eine Abfrage, die so aussieht:

public IList<Post> FetchLatestOrders(int pageIndex, int recordCount)
{
    DatabaseDataContext db = new DatabaseDataContext();
    return (from o in db.Orders
            orderby o.CreatedDate descending
            select o)
            .Skip(pageIndex * recordCount)
            .Take(recordCount)
            .ToList();
}

Ich muss die Informationen der Bestellung und des Benutzers, der sie erstellt hat, ausdrucken:

foreach (var o in FetchLatestOrders(0, 10))
{
    Console.WriteLine("{0} {1}", o.Code, o.Customer.Name);
}

Dies erzeugt eine SQL-Abfrage zum Bringen der Bestellungen und eine Abfrage für jede Bestellung zum Bringen des Kunden.Ist es möglich, die Abfrage so zu optimieren, dass die Bestellungen und der Kunde in einer SQL-Abfrage zusammengefasst werden?

Danke

UDPATE:Auf Vorschlag von Sirrocco habe ich die Abfrage so geändert und es funktioniert.Es wird nur eine Auswahlabfrage generiert:

public IList<Post> FetchLatestOrders(int pageIndex, int recordCount)
{
    var options = new DataLoadOptions();
    options.LoadWith<Post>(o => o.Customer);
    using (var db = new DatabaseDataContext())
    {
        db.LoadOptions = options;
        return (from o in db.Orders
                orderby o.CreatedDate descending
                select o)
                .Skip(pageIndex * recordCount)
                .Take(recordCount)
                .ToList();
    }
}

Danke Sirrocco.

War es hilfreich?

Lösung

Etwas anderes, was Sie tun können, ist EagerLoading.In Linq2SQL können Sie LoadOptions verwenden: Mehr zu LoadOptionsEine SEHR seltsame Sache an L2S ist, dass Sie LoadOptions nur festlegen können, bevor die erste Abfrage an die Datenbank gesendet wird.

Andere Tipps

Vielleicht möchten Sie die Verwendung kompilierter Abfragen in Betracht ziehen

schau mal rein http://www.3devs.com/?p=3

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top