Что не так с этим вызовом метода EF Join? - PullRequest
6 голосов
/ 03 января 2011

В настоящее время я ограничен использованием методов расширения в хранилище данных EF4; Я не могу использовать linq для EF. Я пытаюсь сделать простое соединение за 3 столами. Вот код:

var query = _readOnlyRepository.All<Parent>()
            .Where( p => p.Something == "something" )
            .Join( _readOnlyRepository.All<Child>(), // Child entity
                p => p.ParentID,                     // Parent Key
                c => c.ChildId,                      // Child Key
                ( p, c ) => c )                      // Projection
            .Join( _readOnlyRepository.All<GrandChild>(),
                c => m.ChildID,
                g => g.GrandChildID,
                ( c, g ) => g )
            .Select( joined => joined.Child.Whatever );  

Вот (по сути) сгенерированный SQL:

select c2.Whatever
from Parent p
inner join Child c on p.ParentId = c.ParentId
inner join GrandChild g on c.ChildId = g.ChildId
left outer join Child c2 on g.ChildId = c2.ChildId
where ( "something" = p.Something )  

Что я могу изменить в коде, чтобы устранить это левое внешнее соединение, которое делает недействительным намерение запроса?

1 Ответ

2 голосов
/ 03 января 2011

Мне непонятно, что именно вы пытаетесь вернуть - Какая собственность у GrandChild?Ваше второе объединение возвращает объект GrandChild ( c, g ) => g, поэтому я думаю, что вам просто нужно

.Select( joined => joined.Whatever );   

, потому что здесь joined - это объект GrandChild.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...