2012-07-20 180 views
1

我有一些問題與日期比較我正在研究,你會看到在代碼中(如何做DateTime.Now.AddMonth(2)沒有編譯錯誤將很高興知道),但我真正感興趣的是爲什麼當我遍歷我的foreach,並試圖打印僱主組織名稱時,我得到一個空指針異常。調試後確認僱主實體存在,但爲空。我預計,連接就已經給了我進入這個......Linq加入實體爲空

csoDBConDataContext db = new csoDBConDataContext(); 
db.ObjectTrackingEnabled = false;//see above comment 

var results = (from job in db.jobs 
       join employer in db.employers on job.employer_id equals 
        employer.employer_id 
       where job.cache_major.Contains("business") && 
         job.count_major <= 30 && job.del != true && 
         job.joblocation != null && 
         DateTime.Now.AddMonth(2).CompareTo(((DateTime)job.postdate)) >= 0 && 
         DateTime.Now.CompareTo(((DateTime)job.expiredate)) >= 0 && 
         job.status_id != 406 
       orderby Convert.ToDateTime(job.postdate).DayOfYear 
       select job 
       ).Take(20); 

foreach (var j in results) { 
      output += j.jobtitle + j.joblocation + j.expiredate + j.postdate + 
      j.employer.organizationname + Environment.NewLine + Environment.NewLine; 
     } 

回答

2

通過選擇job,就相當於告訴實體框架,你只在對Job類型的標量值感興趣。

你可以貪婪加載僱主性質是這樣的:

var results = (from job in db.jobs.Include("employer") 
       // ... 
+0

只是注意,這隻會工作,如果[關係](http://msdn.microsoft.com/en-us/library/ee373856 .aspx)正確設置。 – scottm 2012-07-20 18:15:24

+0

@scottm:如果他們不是,我不會期望'j.employer.organizationname'編譯。 – StriplingWarrior 2012-07-20 18:16:20

+1

我使用Linq到SQL連接類型,因此Include不是一個選項。雖然用DataLoadOptions解決了它 - 因爲我需要加載,所以標記爲正確的答案,並且我應該指定我的連接類型。謝謝! – Volvox 2012-07-20 19:14:40