我有以下結構兩個關係表:如何使用兩個相關的表優化一個簡單的LINQ查詢?
'病人':
{ Id = 1, Surname = Smith998 }
...
{ Id = 1000, Surname = Smith1000 }
,第二個是 '接待':
{ PatientId = 1, ReceptionStart = 3/3/2017 1:14:00 AM }
{ PatientId = 1, ReceptionStart = 1/7/2016 1:14:00 AM }
...
{ PatientId = 1000, ReceptionStart = 1/23/2017 1:14:00 AM }
表是不能從數據庫中,但它們是使用以下示例代碼生成的:
var rand = new Random();
var receptions = Enumerable.Range(1, 1000).SelectMany(pid => Enumerable.Range(1, rand.Next(0, 10)).Select(rid => new { PatientId = pid, ReceptionStart = DateTime.Now.AddDays(-rand.Next(1, 500)) })).ToList();
var patients = Enumerable.Range(1, 1000).Select(pid => new { Id = pid, Surname = string.Format("Smith{0}", pid) }).ToList();
問題是選擇在2017年1月1日前有接待的患者的最佳方式是什麼?
事業我可以寫這樣的事:
var cured_receptions = (from r in receptions where r.ReceptionStart < new DateTime(2017, 7, 1) select r.PatientId).Distinct();
var cured_patients = from p in patients where cured_receptions.Contains(p.Id) select p;
,但目前尚不清楚什麼對我「cured_receptions.Contains(p.Id)」代碼實際上呢?它只是遍歷所有搜索Id的患者,或者它使用數據庫中的索引之類的東西嗎?可以cure_receptions.ToDictionary()或類似的東西在這裏幫助不知何故?
你可以把兩個查詢之間的一個連接,並做到在一個單一的步驟 –