2012-07-20 139 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