Linq zu SQL:Kann ich nur ein Feld in einer verknüpften Tabelle eifrig laden?
-
09-06-2019 - |
Frage
Ich habe eine Tabelle „Bestellungen“ mit einem Foreing-Schlüssel „ProductID“.
Ich möchte die Bestellungen in einem Raster mit dem anzeigen Produktname, ohne LazyLoad für eine bessere Leistung, aber ich benutze es DataLoadOptions es ruft ab alle Produktfelder, die wie ein Nähten wirken Overkill.
Gibt es eine Möglichkeit zum Abrufen? nur der Produktname in der ersten Abfrage?Kann ich ein Attribut in der DBML festlegen?
In diesem Tisch sagt, dass „Fremdschlüsselwerte“ in Linq To SQL „sichtbar“ sind, weiß aber nicht, was das bedeutet.
Bearbeiten:Ich habe den Titel geändert, da ich nicht wirklich sicher bin, ob es keine Lösung gibt.
Ich kann nicht glauben, dass niemand das gleiche Problem hat, es ist ein sehr häufiges Szenario.
Lösung 3
Die Lösung erhalte ich in dieser anderen Frage Welcher .net ORM kann dieses Szenario bewältigen?, das hängt mit dem zusammen liammclennan Antwort, aber klarer (vielleicht war die Frage auch klarer)
Andere Tipps
Was Sie verlangen, ist ein Optimierungsgrad, den Linq-to-SQL nicht bietet.Meiner Meinung nach ist es am besten, eine Abfrage zu erstellen, die genau die gewünschten Daten zurückgibt, möglicherweise als anonymen Typ:
from order in DB.GetTable<Orders>()
join product in DB.GetTable<Products>()
on order.ProductID = product.ID
select new { ID = order.ID, Name = order.Name, ProductName = product.Name };
Wenn Sie in der Linq-Abfrage nur die gewünschten Spalten auswählen und dann .ToList() für die Abfrage aufrufen, wird diese sofort ausgeführt und bringt nur die Spalten zurück, an denen Sie interessiert sind.Wenn Sie beispielsweise Folgendes tun:
var q = from p in dataContext.products select p.ProductName;
var results = q.ToList();
Sie erhalten eine Liste der in den Ergebnissen gespeicherten Produktnamen zurück, und wenn die Abfrage auf dem Server ausgeführt wird, wird nur die Spalte „ProductName“ zurückgegeben.