2016-12-18 25 views
1

如何與第WHEREspesific_fieldINSELECT寫LINQ similiar其中從與內部在SQL查詢加入

架構表

|   absent |  |  lab  |   |  time  | 
|———————————————|  |———————————————|   |———————————————| 
|PK| absentID | ┌————|PK| labID  |  ┌————|PK| timeID  | 
| | date      | | | | class_room |  | | | start  | 
|FK| labID  |———┘   | | timeID  |—————┘ | | finish  | 

SELECTlinq如果它是寫在查詢代碼similiar像這樣

SELECT COUNT(*) 
FROM absent 
WHERE labID IN (SELECT lab.labID 
        FROM lab INNER JOIN time 
          ON lab.timeID = time.timeID 
        WHERE lab.class_room = @class_room AND 
          time.start => getdate() and getdate() <= time.finish 

[編輯] [班級模型]

[DataContract] 
    public class absent 
    { 
     [DataMember] 
     public int absentID { get; set; } 

     [DataMember] 
     public string name{ get; set; } 

     [DataMember] 
     public lab labID { get; set; } 
    } 
} 

[DataContract] 
    public class lab 
    { 
     [DataMember] 
     public int LabID{ get; set; } 

     [DataMember] 
     public string class_room { get; set; } 

     [DataMember] 
     public time timeID { get; set; } 
    } 
} 

[DataContract] 
    public class time 
    { 
     [DataMember] 
     public int timeID { get; set; } 

     [DataMember] 
     public DateTime start { get; set; } 

     [DataMember] 
     public DateTime finish{ get; set; } 
    } 
} 
+0

顯示類模型,因爲導航屬性可以使這幾乎微不足道。 –

+0

您可能想要將該sbquery轉換爲'JOIN'以獲得更好的性能,並且可以使用LINQ連接 – Rahul

+0

@Rahul導航屬性的目的不是使用LINQ的連接語句。 –

回答

0

假設你已經從中檢索了所有引用對象的數據庫的完整模型,它看起來像你想的:

 string someClassRoom = null;    //put classroom here 
     DateTime someDateTime = default(DateTime); //put date here 
     List<absent> absentCollection = null;  //your collection or db table here 
     int count = absentCollection 
      .Where(abs => 
       abs.labID.class_room == someClassRoom && 
       abs.labID.timeID.start >= someDateTime && 
       someDateTime <= abs.labID.timeID.finish) 
      .Count();