Angenommen, ich habe drei Tabellen (Customer, Orders, und OrderLines) in einem Linq To Sql-Modell, wo
Kunde -- Eins zu Viele -> Aufträge -- Eins zu Viele -> OrderLines
Wenn ich die
var customer = Customers.First();
var manyWay = from o in customer.CustomerOrders
from l in o.OrderLines
select l;
Ich sehe, dass eine Anfrage den Kunden erreicht, das macht Sinn. Dann sehe ich eine Abfrage für die Bestellungen des Kunden und dann eine einzelne Abfrage für jede Bestellung, um die Bestellzeilen zu erhalten, anstatt die beiden zu verbinden. Insgesamt n + 1 Abfragen (ohne die Ermittlung des Kunden)
Aber wenn ich die
var tableWay = from o in Orders
from l in OrderLines
where o.Customer == customer
&& l.Order == o
select l;
Statt einer einzigen Abfrage für jede Bestellung, die die Bestellzeilen abruft, sehe ich dann eine einzige Abfrage, die die beiden Tabellen verbindet. Insgesamt 1 Abfrage (ohne die Abfrage des Kunden)
Ich würde die erste Linq-Abfrage vorziehen, da sie mir lesbarer erscheint, aber warum verbindet L2S die Tabellen nicht, wie ich es in der ersten Abfrage erwarten würde? Mit LINQPad sehe ich, dass die zweite Abfrage in ein SelectMany kompiliert wird, obwohl ich keine Änderung an der ersten Abfrage sehe, ich bin nicht sicher, ob das ein Hinweis auf ein Problem in meiner Abfrage ist.