从它们之间具有外键的关联表中获取数据
fetch data from associated tables having foreign key in between them
有两个名为 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 class 是City class 的外键,加入两者 tables.I 已正确配置并检查两者相互连接。
现在,我有一个 Json 操作方法来获取所需的 属性,如下所示:
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.It 在 CityName = project.City.CityName.Please 行给出 System.NullRefernceException 建议我现在该怎么办。 我的代码有问题。我可以获得其他属性。
当您使用 .ToList()
、.ToArray()
等内容时,您就是在具体化查询。在 LINQ to EF 中,实现查询意味着 运行 查询 SQL 并使用从数据库接收的数据填充 类。从那时起,就不可能从数据库中检索到以下引用的属性。
LINQ to EF 使用 IQueryable<T>
接口。 IQueryable<T>
是尚未成为 "executed" 的 "potential query"。当您执行未具体化查询的操作时,您的查询将保持 IQueryable<T>
并且不会在数据库中执行。
还有一个实现可查询的东西:枚举它。
因此,您需要做的是在提供 运行 查询所需的所有信息之前不要具体化查询。在这种情况下,您必须删除 .ToList()
有两个名为 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 class 是City class 的外键,加入两者 tables.I 已正确配置并检查两者相互连接。 现在,我有一个 Json 操作方法来获取所需的 属性,如下所示:
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.It 在 CityName = project.City.CityName.Please 行给出 System.NullRefernceException 建议我现在该怎么办。 我的代码有问题。我可以获得其他属性。
当您使用 .ToList()
、.ToArray()
等内容时,您就是在具体化查询。在 LINQ to EF 中,实现查询意味着 运行 查询 SQL 并使用从数据库接收的数据填充 类。从那时起,就不可能从数据库中检索到以下引用的属性。
LINQ to EF 使用 IQueryable<T>
接口。 IQueryable<T>
是尚未成为 "executed" 的 "potential query"。当您执行未具体化查询的操作时,您的查询将保持 IQueryable<T>
并且不会在数据库中执行。
还有一个实现可查询的东西:枚举它。
因此,您需要做的是在提供 运行 查询所需的所有信息之前不要具体化查询。在这种情况下,您必须删除 .ToList()