2016-03-15 134 views
1

我有一個Web API方法用於搜索名爲'Patients'的EF對象。患者有一個名爲Referrals的導航屬性(一名患者可以有多個引薦),每個Referral都有一個名爲'ConsultantID'的整數屬性。LINQ select數組中的EF導航屬性值

我想要返回所有患有ConsultantID值在名爲'consultants'的定義數組內的推薦患者,但我無法理解所需的邏輯。我目前有下面的內容,但它並沒有像我預期的那樣工作,Referrals.Any調用似乎在執行'Exists'調用,而不是我期待的加入行爲。

public List<HelperCode.DTO.SearchResult> SearchPatients(string firstname, string surname, [FromUri] int[] consultants) 
     { 
      IQueryable<Patient> results = db.Patients; 

      List<HelperCode.DTO.SearchResult> output = new List<HelperCode.DTO.SearchResult>(); 

      List<int> inputConsultants = consultants.OfType<int>().ToList(); 


      if (!String.IsNullOrEmpty(firstname)) { results = db.Patients.Where(c => c.FirstName.ToLower().Contains(firstname.ToLower())); } 
      if (!String.IsNullOrEmpty(surname)) { results = results.Where(c => c.Surname.ToLower().Contains(surname.ToLower())); } 


      if (consultants.Length > 0) { 
       results = results.Where(c => c.Referrals.Any(r => inputConsultants.Contains(r.ConsultantID ?? default(int)))); 
      } 


      results = results.OrderBy(i => i.Surname); 

      foreach (Patient p in results) { 
       output.Add(new HelperCode.DTO.SearchResult(p)); 
      } 

      return output; 
     } 
+0

這行'consultants.OfType ().ToList()'的用途是什麼? – Ric

+0

爲什麼你關心SQL查詢是使用'EXISTS'還是'JOIN'?你得到正確的結果?如果是這樣,問題是什麼? –

+0

@Ric它純粹是將顧問數組轉換爲列表,以便稍後調用.Contains方法。 –

回答

0

開發者的工具,代碼工作正常,但輸入值不正確。希望對某個人有用處。