Принуждение linq к выполнению внутренних соединений

Я пытаюсь заставить Linq выполнить внутреннее соединение между двумя таблицами. Я приведу пример.

CREATE TABLE [dbo].[People] (
   [PersonId] [int] NOT NULL,
   [Name] [nvarchar](MAX) NOT NULL,
   [UpdatedDate] [smalldatetime] NOT NULL
   ... Other fields ...
)

CREATE TABLE [dbo].[CompanyPositions] (
   [CompanyPositionId] [int] NOT NULL,
   [CompanyId] [int] NOT NULL,
   [PersonId] [int] NOT NULL,
   ... Other fields ...
)

Теперь я работаю с необычной базой данных, поскольку есть не зависящая от меня причина, по которой люди могут отсутствовать в таблице People, но иметь запись в CompanyPositions. Я хочу отфильтровать CompanyPositions с отсутствующими людьми путем объединения таблиц.

return (from pos in CompanyPositions
        join p in People on pos.PersonId equals p.PersonId
        select pos).ToList();

Linq считает это объединение избыточным и удаляет его из генерируемого им SQL.

SELECT 
[Extent1].[CompanyPositionId] AS [CompanyPositionId], 
[Extent1].[CompanyId] AS [CompanyId], 
.... 
FROM  [dbo].[CompanyPositions] AS [Extent1]

Однако в моем случае это не является избыточным. Я могу исправить это вот так

// The min date check will always be true, here to force linq to perform the inner join
var minDate = DateTimeExtensions.SqlMinSmallDate;

return (from pos in CompanyPositions
        join p in People on pos.PersonId equals p.PersonId
        where p.UpdatedDate >= minDate
        select pos).ToList();

Однако теперь это создает ненужное предложение where в моем SQL. В чистом виде я бы хотел удалить это. Любая идея или текущий дизайн базы данных связывает мне руки?

10
задан svick 23 November 2011 в 14:51
поделиться