2013-01-09 2 views
1
CREATE TABLE PersonTask 
(
PersonId INT NOT NULL, 
WeekId INT NOT NULL, 
WeekDaysTaskId INT, 
WeekEndTaskId INT 
) 
GO 
CREATE TABLE Task 
(
Id INT PRIMARY KEY, 
[Description] VARCHAR(250) NOT NULL 
) 
GO 
INSERT INTO Task(Id, [Description]) VALUES(1, 'Task-01') 
INSERT INTO Task(Id, [Description]) VALUES(2, 'Task-02') 
INSERT INTO Task(Id, [Description]) VALUES(3, 'Task-03') 
GO 
INSERT INTO PersonTask(PersonId, WeekId, WeekDaysTaskId, WeekEndTaskId) VALUES(1, 1, NULL, 1) 
INSERT INTO PersonTask(PersonId, WeekId, WeekDaysTaskId, WeekEndTaskId) VALUES(1, 2, 2, NULL) 
INSERT INTO PersonTask(PersonId, WeekId, WeekDaysTaskId, WeekEndTaskId) VALUES(1, 3, 3, 3) 
GO 

SELECT 
     PT.PersonId, 
     WeekId, 
     'Not on Bench' as [Status] 
    FROM PersonTask AS PT 
    INNER JOIN Task AS T ON T.Id IN (PT.WeekDaysTaskId, PT.WeekEndTaskId) 
    WHERE WeekId = 3/*Param-1*/ and PersonId = 1/*Param-2*/ 

나는 위의 T-SQL 문에 해당하는 있지만 헛된 쿼리를 작성하려고합니다. C# Linq 쿼리를 사용하여 위의 T-SQL 문을 얻을 수 있습니까?SQL 내부 조인에 대한 Linq 해당 문 IN 문 사용

+0

좋아, EF 또는 Linq-to-SQL을 사용하고 있습니까? 나는 둘 다 사용할 수 있다고 생각하지 않는다. (아마도 linq-to-entities 태그를 사용하려고했다.) 또한 LINQ 쿼리로 SELECT 문을 작성하는 방법에 대해 묻고 있습니까? – IronMan84

+0

@ IronMan84, Linq-To-SQL – teenboy

답변

1

이 같은이어야합니다 (당신이 가지고 제공을 personTaskQueryable 및 taskQueryable) :

from pt in personTaskQueryable 
from t in taskQueryable 
where (t.Id == pt.WeekDaysTaskId || t.Id == pt.WeekEndTaskId) 
    && pt.WeekId == 3 && pt.PersonId == 1 
select new { pt.PersonId, pt.WeekId, Status = "Not on Bench" } 

내가 직접 답변 텍스트 상자에 코딩되었지만 Linq에 문서가 당신이 그런 일을 할 수 없다는 때문에 시도하지 않았다 equijoins 만 지원하기 때문에 "조인"연산자.

해결책은 먼저 데카르트 곱을 만들고 거기에서 결과 집합을 제한하는 것입니다.