2
我有一名員工。 員工有一個(父母)部門。 1:N,部門與員工。 員工有N個EmployeeToJobTitleMatchLink(s)。
員工有N個ParkingArea(s)。NHibernate Linq //帶子對象的FirstOrDefault //可能嗎?
當使用NHibernate和LINQ和 「FirstOrDefault」 ..
EmployeeNHEntity firstOrDefaultEmp = session.Query<EmployeeNHEntity>()
.Fetch(e => e.MyEmployeeToJobTitleMatchLinks)
.Fetch(e => e.ParentDepartment)
.Fetch(e => e.MyParkingAreas)
.Where(e => e.EmployeeUUID == employeeUuid)
.FirstOrDefault();
我得到這個SQL。 (最重要的部分是「頂部1」。
exec sp_executesql N'select TOP (1) employeenh0_.EmployeeUUID as Employee1_1_0_, myemployee1_.LinkSurrogateUUID as LinkSurr1_3_1_, department2_.DepartmentUUID as Departme1_0_2_, parkingare4_.ParkingAreaUUID as ParkingA1_5_3_, employeenh0_.MyVersionColumn as MyVersio2_1_0_, employeenh0_.SSN as SSN1_0_, employeenh0_.LastName as LastName1_0_, employeenh0_.FirstName as FirstName1_0_, employeenh0_.CreateDate as CreateDate1_0_, employeenh0_.HireDate as HireDate1_0_, employeenh0_.ParentDepartmentUUID as ParentDe8_1_0_, myemployee1_.PriorityRank as Priority2_3_1_, myemployee1_.JobStartedOnDate as JobStart3_3_1_, myemployee1_.TheEmployeeUUID as TheEmplo4_3_1_, myemployee1_.TheJobTitleUUID as TheJobTi5_3_1_, myemployee1_.TheEmployeeUUID as TheEmplo4_0__, myemployee1_.LinkSurrogateUUID as LinkSurr1_0__, department2_.MyVersionColumn as MyVersio2_0_2_, department2_.DepartmentName as Departme3_0_2_, department2_.CreateDate as CreateDate0_2_, parkingare4_.ParkingAreaName as ParkingA2_5_3_, parkingare4_.CreateDate as CreateDate5_3_, myparkinga3_.AbcEmployeeUUID as AbcEmplo1_1__, myparkinga3_.AbcParkingAreaUUID as AbcParki2_1__ from dbo.Employee employeenh0_ left outer join dbo.EmployeeToJobTitleMatchLink myemployee1_ on employeenh0_.EmployeeUUID=myemployee1_.TheEmployeeUUID left outer join dbo.Department department2_ on employeenh0_.ParentDepartmentUUID=department2_.DepartmentUUID left outer join EmployeeToParkingAreaLink myparkinga3_ on employeenh0_.EmployeeUUID=myparkinga3_.AbcEmployeeUUID left outer join dbo.ParkingArea parkingare4_ on myparkinga3_.AbcParkingAreaUUID=parkingare4_.ParkingAreaUUID where [email protected]',N'@p0 uniqueidentifier',@p0='64409648-15C5-4B67-BCE2-A265012E0926'
的問題是,我得到1行(前1)。雖然我有1名員工,我做一下在結果多行。
現在,如果我使用下面的內容,我會得到期望的結果(單個僱員與子對象填充)....如果在代理鍵(EmployeeUUID)匹配,有一個項目在集合。
IList<EmployeeNHEntity> emps = session.Query<EmployeeNHEntity>()
.Fetch(e => e.MyEmployeeToJobTitleMatchLinks)
.Fetch(e => e.ParentDepartment)
.Fetch(e => e.MyParkingAreas)
.Where(e => e.EmployeeUUID == employeeUuid)
.ToList();
EmployeeNHEntity emp = null;
if(null!=emps)
{
if (emps.Count > 0)
{
emp = emps[0];
}
}
生成此SQL
exec sp_executesql N'select employeenh0_.EmployeeUUID as Employee1_1_0_, myemployee1_.LinkSurrogateUUID as LinkSurr1_3_1_, department2_.DepartmentUUID as Departme1_0_2_, parkingare4_.ParkingAreaUUID as ParkingA1_5_3_, employeenh0_.MyVersionColumn as MyVersio2_1_0_, employeenh0_.SSN as SSN1_0_, employeenh0_.LastName as LastName1_0_, employeenh0_.FirstName as FirstName1_0_, employeenh0_.CreateDate as CreateDate1_0_, employeenh0_.HireDate as HireDate1_0_, employeenh0_.ParentDepartmentUUID as ParentDe8_1_0_, myemployee1_.PriorityRank as Priority2_3_1_, myemployee1_.JobStartedOnDate as JobStart3_3_1_, myemployee1_.TheEmployeeUUID as TheEmplo4_3_1_, myemployee1_.TheJobTitleUUID as TheJobTi5_3_1_, myemployee1_.TheEmployeeUUID as TheEmplo4_0__, myemployee1_.LinkSurrogateUUID as LinkSurr1_0__, department2_.MyVersionColumn as MyVersio2_0_2_, department2_.DepartmentName as Departme3_0_2_, department2_.CreateDate as CreateDate0_2_, parkingare4_.ParkingAreaName as ParkingA2_5_3_, parkingare4_.CreateDate as CreateDate5_3_, myparkinga3_.AbcEmployeeUUID as AbcEmplo1_1__, myparkinga3_.AbcParkingAreaUUID as AbcParki2_1__ from dbo.Employee employeenh0_ left outer join dbo.EmployeeToJobTitleMatchLink myemployee1_ on employeenh0_.EmployeeUUID=myemployee1_.TheEmployeeUUID left outer join dbo.Department department2_ on employeenh0_.ParentDepartmentUUID=department2_.DepartmentUUID left outer join EmployeeToParkingAreaLink myparkinga3_ on employeenh0_.EmployeeUUID=myparkinga3_.AbcEmployeeUUID left outer join dbo.ParkingArea parkingare4_ on myparkinga3_.AbcParkingAreaUUID=parkingare4_.ParkingAreaUUID where [email protected]',N'@p0 uniqueidentifier',@p0='64409648-15C5-4B67-BCE2-A265012E0926'
[0]索引器技巧沒問題。但只是沒有我想要的Linq代碼那麼幹淨。
任何建議現在LINQ語法獲得前1名員工,但與所有的兒童對象?
爲什麼shloud他使用'AsEnumerable'方法? –
我不知道爲什麼這樣的作品,但它的作品。什麼是伏都教? – granadaCoder
我閱讀了文檔。我沒有看到任何提示。 http://msdn.microsoft.com/en-us/library/bb340482.aspx – granadaCoder