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;
}
這行'consultants.OfType().ToList()'的用途是什麼? –
Ric
爲什麼你關心SQL查詢是使用'EXISTS'還是'JOIN'?你得到正確的結果?如果是這樣,問題是什麼? –
@Ric它純粹是將顧問數組轉換爲列表,以便稍後調用.Contains方法。 –