Linq 강제로 두 테이블 간의 내부 조인을 preform하려면 노력하고있어. 예를 들어 보겠습니다. 사람들이 사람들 테이블에서 누락하지만 CompanyPositions의 기록이 될 내 통제 할 수없는 이유가 거기로 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 ...
)
는 지금은 특별한 데이터베이스와 함께 일하고 있어요. 나는 사람들을 잃어버린 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();
그러나 이제는 내 SQL에 불필요한 where 절이 생성됩니다. 순수한 나는 이것을 제거하고 싶습니다. 어떤 생각이든, 현재의 데이터베이스 디자인이 내 손을 묶는가?
? LINQ to SQL? 엔티티에 대한 LINQ? 다른 것? – svick
모델에 탐색 속성이 있습니까? 그렇다면'where pos.Person! = null'과 같이 쓸 수 있습니다. – svick
LinqToSql을 사용하고 있는데, 'pos.Person! = null'및 'p.PersonId! = 0'을 시도하고 Linq가이를 제거합니다. 'p.PersonId! = 0'의 경우 'pos.PersonId! = 0'으로 바뀌어 그것이 내가 겪은 것이 아니더라도 나를 감동시킵니다. – Magpie