Как я могу заставить LINQ to SQL выполнить INNER JOIN для внешнего ключа, который может содержать NULL?

У меня очень простая настройка. Таблица «Узел» имеет обнуляемый внешний ключ «ObjectId». Это представлено в моей модели базы данных с ассоциацией «один ко многим». Теперь я хочу выполнить запрос, который дает мне все Node-объекты с определенным идентификатором объекта. В прямом SQL это очень просто:

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

Но теперь я хочу сделать то же самое в LINQ to SQL:

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();
...

Расстраивает то, что LINQвсегда генерирует LEFT OUTER JOIN для этого запроса, и ничего из того, что я пробовал, не имеет значения.

На первый взгляд, это имеет смысл. Внешний ключ ObjectId обнуляется, поэтому некоторые узлы не будут иметь связанный объект. Но в моем запросе я предоставляю идентификатор объекта. Меня не интересуют узлы без связанного объекта.

В этом случае ВНУТРЕННЕЕ СОЕДИНЕНИЕ - правильная вещь, но как мне убедить LINQ?

Ответы на вопрос(4)

Ваш ответ на вопрос