C# 具有子实体和孙子实体的项目数据

C# 具有子实体和孙子实体的项目数据,c#,entity-framework,linq-to-entities,C#,Entity Framework,Linq To Entities,我正在尝试以适合api的格式获取数据 我想要的是 Place --Rating1 ---RatingImage1.1 ---RatingImage1.2 ---UserName ---UserId --Rating2 ---RatingImage2.1 ---RatingImage2.2 ---UserName ---UserId 简言之,我试图获取一个地方,它的评级(和评级图像),以及根据googlePlaceId进行评级的用户的姓名 尝试过这一点,但它会去做一些循环获取,一旦它获取了用户,

我正在尝试以适合api的格式获取数据

我想要的是

Place
--Rating1
---RatingImage1.1
---RatingImage1.2
---UserName
---UserId
--Rating2
---RatingImage2.1
---RatingImage2.2
---UserName
---UserId
简言之,我试图获取一个地方,它的评级(和评级图像),以及根据googlePlaceId进行评级的用户的姓名

尝试过这一点,但它会去做一些循环获取,一旦它获取了用户,它就会获取用户评级,并且响应变得巨大

context.Places
            .Include(x => x.Ratings.Select(y => y.User))
            .Include(x => x.Ratings.Select(c => c.RatingImages))
            .Single(x => x.GooglePlaceId == googlePlaceId);
我认为投影或linq连接一定是一种方式,但我还没有取得任何成功

这是我的POCO

波科广场

public class Place
    {
        public Place()
        {
            Ratings = new List<Rating>();
            Favourites = new List<Favourite>();
        }

        public int Id { get; set; }
        public string Name { get; set; }
        public string GooglePlaceId { get; set; }


        public  ICollection<Rating> Ratings { get; set; }
        public  ICollection<Favourite> Favourites { get; set; }

    }

虽然您省略了AspNetUser的定义,但我猜它有一个导航属性返回到评级。您的应用程序中的其他地方是否需要此选项?它不会影响数据库的结构,删除它将允许您的投影完全按照这里的方式工作。您仍然可以使用单独的查询显示单个用户的所有评分-但您必须针对最常见的场景进行优化。

。为什么你忽视了那里的解释和询问?你应该编辑原始问题。@gert,我可能应该把最初的问题写得更好,我希望这是一个更好的尝试。虽然我知道包含不是正确的方式。我正在寻找一个关于如何做到这一点的答案,因为即使是我没有接近的预测——这很有趣,我已经在AspNetUser中加入了ICollection评分,因为我想建立FK关系。(从我所看到的情况来看,这似乎很常见,即一个类中的id+实体和另一个类中的集合……在我的上下文中,我需要modelBuilder.entity().HasRequired(x=>x.User)。with many(x=>x.Ratings)。HasForeignKey(x=>x.UserId)。WillCascadeOnDelete(false);
 public class Rating
    {
        public Rating()
        {
            RatingImages = new List<RatingImage>();

        }

        public int Id { get; set; }
        public float RatingValue { get; set; }
        public string RatingComment { get; set; }


        public int PlaceId { get; set; }
        public Place Place { get; set; }

        public string UserId { get; set; }
        public AspNetUser User { get; set; }

        public  ICollection<RatingImage> RatingImages { get; set; }

    }
public partial class AspNetUser
    {

public string UserName { get; set; }
public string Id { get; set; }

// the rest of the fields are omitted
}