Wie kann ich LINQ to SQL zwingen, einen INNER JOIN für einen nullfähigen Fremdschlüssel auszuführen?

Ich habe eine sehr einfache Einrichtung. Die Tabelle "Node" hat einen nullbaren Fremdschlüssel "ObjectId". Dies ist in meinem Datenbankmodell mit einer Eins-zu-Viele-Zuordnung dargestellt. Jetzt möchte ich eine Abfrage ausführen, die mir alle Knotenobjekte mit einer bestimmten Objekt-ID gibt. In direktem SQL ist dies sehr einfach:

SELECT Node.*, Object.*
FROM Node INNER JOIN Object
    ON Node.ObjectId = Object.ObjectId
WHERE Node.ObjectId = @objectId

Aber jetzt möchte ich dasselbe in LINQ to SQL tun:

private static Func<MyDataContext, string, IQueryable<DataNode>> _queryGet =
        CompiledQuery.Compile(
            (MyDataContext context, string objectId) =>
                (from node in context.DataNodes
                 where node.ObjectId == objectId
                 select node));

var loadOptions = new DataLoadOptions();
loadOptions.LoadWith<DataNode>(node => node.DataObject);
context.LoadOptions = loadOptions;

DataNode node = _queryGet.Invoke(context, objectId).FirstOrDefault();
...

Das Frustrierende ist, dass LINQimme generiert einen LEFT OUTER JOIN für diese Abfrage und nichts, was ich ausprobiert habe, macht einen Unterschied.

uf den ersten Blick scheint dies einen Sinn zu ergeben. Der ObjectId-Fremdschlüssel ist nullwertfähig, sodass einigen Knoten kein Objekt zugeordnet ist. In meiner Abfrage gebe ich jedoch eine Objekt-ID an. Ich interessiere mich nicht für Knoten ohne zugehöriges Objekt.

In diesem Fall ist ein INNER JOIN das Richtige, aber wie kann ich LINQ überzeugen?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage