MVC3을 사용하면서도 LINQ를 배우고 있습니다. LINQ 쿼리를 엔터티로 변환하는 데 문제가 있습니다. 직원 개체를 반환하고 싶습니다.Ninject를 사용하여 MVC3에서 SQL을 LINQ로 변환
SELECT E.EmployeeID, E.FirstName, E.LastName, MAX(EO.EmployeeOperationDate) AS "Last Operation"
FROM Employees E
INNER JOIN EmployeeStatus ES ON E.EmployeeID = ES.EmployeeID
INNER JOIN EmployeeOperations EO ON ES.EmployeeStatusID = EO.EmployeeStatusID
INNER JOIN Teams T ON T.TeamID = ES.TeamID
WHERE T.TeamName = 'MyTeam'
GROUP BY E.EmployeeID, E.FirstName, E.LastName
ORDER BY E.FirstName, E.LastName
몇 가지 테이블이 있지만 EmployeeOpertionDate를 기반으로 최신 상태 만 가져와야합니다. 이 SQL에서 잘 작동하는 것으로 보인다. 또한 Ninject를 사용하여 Ienumerable을 반환하도록 내 쿼리를 설정합니다. 그룹별로 옵션을 가지고 놀았지만 IGroupable을 반환합니다. 속성 객체 유형을 변환하고 반환하는 지침은 만족 스러울 것입니다.
편집 : LINQ에서이 글을 쓰기 시작했으나 올바른 형식을 올바르게 반환하거나 캐스트하는 방법을 모르겠습니다.
public IQueryable<Employee> GetEmployeesByTeam(int teamID)
{
var q = from E in context.Employees
join ES in context.EmployeeStatuses on E.EmployeeID equals ES.EmployeeID
join EO in context.EmployeeOperations on ES.EmployeeStatusID equals EO.EmployeeStatusID
join T in context.Teams on ES.TeamID equals T.TeamID
where T.TeamName == "MyTeam"
group E by E.EmployeeID into G
select G;
return q;
}
Edit2가 :
이가 작동하는 것 같다나 나는 당신의 SQL 쿼리가 작동하도록되어 방법에 정확하게 명확하지,하지만 난이 모양을 시도했습니다
public IQueryable<Employee> GetEmployeesByTeam(int teamID)
{
var q = from E in context.Employees
join ES in context.EmployeeStatuses on E.EmployeeID equals ES.EmployeeID
join EO in context.EmployeeOperations.OrderByDescending(eo => eo.EmployeeOperationDate) on ES.EmployeeStatusID equals EO.EmployeeStatusID
join T in context.Teams on ES.TeamID equals T.TeamID
where T.TeamID == teamID
group E by E.EmployeeID into G
select G.FirstOrDefault();
return q;
}
이 사용하려고했던'Linqer' http://www.sqltolinq.com/, 너무 ... – Yasser
귀하의 SQL 쿼리가 LINQ가있는 동안 왼쪽 외부 조인을 사용하는 많은 사람들이있다 내부 조인을 사용하면 다른 테이블에 일치하는 행이 없더라도 SQL이 행을 반환합니다. LINQ는 모든 테이블에 일치하는 데이터가있는 경우에만 행을 반환합니다. 당신이하고있는 일을 그냥 보면서, 당신은 내적 조인을해야한다고 생각합니다 ??? –
맞습니다. 내부 조인을 사용해야합니다. 지금 당장은 적절한 구문에 대해 더 염려합니다. 위의 예를 수정합니다. – Jeff