与儿童和孙子实体的项目数据

时间:2016-03-29 18:50:06

标签: c# entity-framework linq-to-entities

我试图以适当的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加入必须是方式,但我还没有取得任何成功。

这是我的POCOS

放置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; }

    }

评级POCO

 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; }

    }

用户POCO

public partial class AspNetUser
    {

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

// the rest of the fields are omitted
}

1 个答案:

答案 0 :(得分:0)

虽然您已经省略了AspNetUser的定义,但我猜它有一个返回评级的导航属性。这是否需要您的应用程序中的任它不会影响数据库的结构,并且删除它将使您的投影完全像您在此处获得的那样工作。您仍然可以使用单独的查询显示单个用户的所有评分 - 但您必须针对最常见的情况进行优化。