Ich habe einen linken äußeren Join (unten), der Ergebnisse wie erwartet zurückgibt. Ich muss die Ergebnisse von der "richtigen" Tabelle auf den "ersten" Treffer begrenzen. Kann ich das irgendwie machen? Momentan erhalte ich für jeden Datensatz in beiden Tabellen ein Ergebnis. Ich möchte nur ein Ergebnis aus der Tabelle links (Elemente) sehen, egal wie viele Ergebnisse ich in der rechten Tabelle (Fotos) habe.Wie Sie einen LINQ linken äußeren Join auf eine Zeile begrenzen
var query = from i in db.items
join p in db.photos
on i.id equals p.item_id into tempPhoto
from tp in tempPhoto.DefaultIfEmpty()
orderby i.date descending
select new
{
itemName = i.name,
itemID = i.id,
id = i.id,
photoID = tp.PhotoID.ToString()
};
GridView1.DataSource = query;
GridView1.DataBind();
Ich mag die Eleganz dieser Lösung, aber ich denke, dass dies eine Abfrage erstellen kann, die für SQL schwieriger zu optimieren ist, weil die Subauswahl –
I überprüft und war sowohl mit dem generierten SQL als auch mit dem geschätzten Ausführungsplan zufrieden. Der Subselect sollte ein linker Outer Join sein. –
cool jede Chance, die Sie die SQL veröffentlichen können, bin ich gespannt, es zu sehen. –