2015-11-03 56 views
0
SELECT 
    EmployeeType.EmployeeTypeName, EmployeeAttendanceTypes.OverTimeAllowed, 
    EmployeeAttendanceTypes.SundayOffAllowed,     
    EmployeeAttendanceTypes.LeavesAllowed 
FROM 
    EmployeeAttendanceTypes 
INNER JOIN 
    EmployeeType ON EmployeeAttendanceTypes.CompanyId = EmployeeType.CompanyId 
       AND EmployeeAttendanceTypes.EmployeeTypeId = EmployeeType.EmployeeTypeId 

加入如何寫這個查詢Linq中的C#?SQL查詢內Linq中

+2

你不這樣做,至少在精心設計的解決方案。你在你的實體中創建關係,例如。 EmployeeType具有AttendanceTypes集合屬性。在此之後,加載一個EmployeeType也將加載相關AttendanceTypes,無論是熱切(即連接)或懶洋洋地(與單獨的查詢,如果/當你需要他們) –

+0

另一種選擇是將其定義爲一個M-1的關係,也就是說,如果EmployeeType只能有一個AttendanceType,該EmployeeType類將有一個AttendanceType屬性 –

回答

0

我會與你不評論同意,但它並不總是可能避免。嘗試:

var result = from eat in EmployeeAttaendanceType 
      join et in EmployeeType on 
       new { cId = eat.CompanyId, etId = eat.EmployeeTypeId } 
      equals 
       new { cId = et.CompanyId, etId = et.EmployeeTypeId } 
      select new { 
       EmployeeTypeName = EmployeeType.EmployeeTypeName, 
       OverTimeAllowed = EmployeeAttendanceTypes.OverTimeAllowed,  
       SundayOffAllowed = EmployeeAttendanceTypes.SundayOffAllowed,     
       LeavesAllowed = EmployeeAttendanceTypes.LeavesAllowed 
      } 

或者你也可以做到這一點

var result = EmployeeAttendanceType.Join(EmployeeType, 
       eat => new { cId = eat.CompanyId, etId = eat.EmployeeTypeId },   
       et => new { cId = et.CompanyId, etId = et.EmployeeTypeId }, 
       (eat, et) => new { 
        EmployeeTypeName = EmployeeType.EmployeeTypeName, 
        OverTimeAllowed = EmployeeAttendanceTypes.OverTimeAllowed,  
        SundayOffAllowed = EmployeeAttendanceTypes.SundayOffAllowed,     
        LeavesAllowed = EmployeeAttendanceTypes.LeavesAllowed 
       }); 

這些選擇到匿名類型,但可以選擇到任何物體。