从它们之间具有外键的关联表中获取数据

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()