Optimieren einer LINQ to SQL-Abfrage
-
09-06-2019 - |
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.
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