Я пытаюсь заставить 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.Как чистейший я хотел бы удалить это.Любая идея или текущий дизайн базы данных связывает мои руки?