有两个名为project和city的表:
public class Project
{
[Key]
public int ProjectId { get; set; }
public string ProjectName { get; set; }
public int CityID { get; set; }
public City City { get; set; }
}
public class City
{
[Key]
public int CityID { get; set; }
public string CityName { get; set; }
public ICollection<Project> Projects { get; set; }
}
此处,项目类中的CityID是连接两个表的City类的外键。我已正确配置并检查两者是否相互连接。 现在,我有一个Json动作方法来获取Desired属性,如下所示:
public JsonResult GetProjects()
{
var ret = (from project in db.Projects.ToList()
orderby project.ProjectId
select new
{
CityName = project.City.CityName,
ProjectId = project.ProjectId
}).AsEnumerable();
return Json(ret, JsonRequestBehavior.AllowGet);
}
在这里,我试图推出cityName,但我无法取回cityname。它在CityName = project.City.CityName行提供System.NullRefernceException。请建议我现在该做什么。 / strong>我的代码有问题。我能够得到其他房产。
答案 0 :(得分:2)
如果您使用.ToList()
,.ToArray()
之类的内容,那么您正在实现查询。在LINQ to EF中,查询意味着运行SQL查询并使用从DB接收的数据填充类。从那时起,就不可能从dtabase中检索以下引用的属性。
LINQ to EF使用IQueryable<T>
接口。 IQueryable<T>
是一个&#34;潜在的查询&#34;还没有被执行过#34;当您执行的操作没有实现查询时,您的查询将保持IQueryable<T>
,并且不会在数据库中执行。
还有另一件事实现了可查询:枚举它。
因此,在提供运行查询所需的所有信息之前,您需要的是不实现查询。在这种情况下,您必须删除.ToList()