Преобразование запроса внешнего соединения слева в запрос Entity Framework

#entity-framework-4 #linq-to-entities

#entity-framework-4 #linq-to-entities

Вопрос:

У меня есть инструкция sql, которую я хочу иметь возможность конвертировать в EF4.

Это простое внешнее соединение слева, которое выглядит как

 SELECT * 
FROM EntryDate 
LEFT OUTER JOIN Member on Member.CardId = EntryDate.CardID
  

как мне это сделать, используя entity framework 4?

Ответ №1:

Если в вашей модели сопоставлено отношение, вы можете просто использовать свойства навигации, потому что они всегда используют соединение по левому краю:

 var data = members.EntryDates; 
  

Я ожидаю, что у вас нет такого отношения, потому что CardId это не похоже на первичный ключ Member или EntryDate .

Если у вас нет свойств навигации, вы должны использовать

 var query = from m in context.Members
            join e in context.EntryDates on m.CardId equals e.CardId into x
            from res in x.DefaultIfEmpty()
            select new
            {
               Member = m,
               EntryDate = res
            };
  

Это работает только в EFv4 , потому что EFv1 не поддерживается DefaultIfEmpty .

Комментарии:

1. Спасибо, Ладислав, да, у меня нет никаких свойств навигации, поэтому мне пришлось использовать 2-й вариант