私は MVC3 を使用していますが、まだ LINQ を学習しています。クエリを LINQ to Entities に変換しようとすると、問題が発生します。従業員オブジェクトを返したい。
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;
}
編集2:
これは私のために働くようです
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;
}