C# EF嵌套表是否正在加载?

C# EF嵌套表是否正在加载?,c#,entity-framework,lambda,eager-loading,C#,Entity Framework,Lambda,Eager Loading,我的表关系: 类别有许多帖子有许多帖子 我想检索类别>LastPost>FirstPostImage。我尝试了以下方法: var categories = entity.Categories .Where(x => x.PositionId == 2) .Include(x => x.Posts.Last()) .Include(x => x.Posts.Last().Post

我的表关系:

类别
有许多
帖子
有许多
帖子

我想检索类别>LastPost>FirstPostImage。我尝试了以下方法:

var categories = entity.Categories
                 .Where(x => x.PositionId == 2)
                 .Include(x => x.Posts.Last())
                 .Include(x => x.Posts.Last().PostImages.First())
                 .Take(5)
                 .ToList();

问:有没有一种优雅的方式来实现这一点?嵌套关系表是否通常使用即时加载?

EF不支持对包含的表进行查询,但您可以使用
Select
子句进行子查询:

var categories = entity.Categories
  .Where(x => x.PositionId == 2)
  .Select( x => new {
    Category = x,
    LastPost = x.Posts.Last(),
    FirstImage = x.Posts.Last().PostImages.First(),
  })
  .Take(5)
  .ToList();

您将得到一个
列表,但它将(仅)获得您所需的数据。

EF不支持对包含的表进行查询,但您可以使用
Select
子句进行子查询:

var categories = entity.Categories
  .Where(x => x.PositionId == 2)
  .Select( x => new {
    Category = x,
    LastPost = x.Posts.Last(),
    FirstImage = x.Posts.Last().PostImages.First(),
  })
  .Take(5)
  .ToList();

您将得到一个
列表
,但它将(仅)获得您需要的数据。

我建议您使用数据传输对象(DTO)。只需创建新类:

public class CategoriesPostPostImagesDto
{
     public Categories Category {get;set;}
     public Posts Post {get;set;}
     public PostImages PostImage {get;set;}

}
然后从数据库中选择数据

List<CategoriesPostPostImagesDto> data = entity.Categories
  .Where(x => x.PositionId == 2)
  .Select( x => new CategoriesPostPostImagesDto(){
    Category = x,
    Post = x.Posts.Last(),
    PostImage = x.Posts.Last().PostImages.First(),
  })
  .Take(5)
  .ToList();
List data=entity.Categories
.其中(x=>x.PositionId==2)
.Select(x=>newcategoriesPostImagesTo(){
类别=x,
Post=x.Posts.Last(),
PostImage=x.Posts.Last().PostImages.First(),
})
.采取(5)
.ToList();
互联网上有很多关于DTO的信息:

像这样:
我建议您使用数据传输对象(DTO)。只需创建新类:

public class CategoriesPostPostImagesDto
{
     public Categories Category {get;set;}
     public Posts Post {get;set;}
     public PostImages PostImage {get;set;}

}
然后从数据库中选择数据

List<CategoriesPostPostImagesDto> data = entity.Categories
  .Where(x => x.PositionId == 2)
  .Select( x => new CategoriesPostPostImagesDto(){
    Category = x,
    Post = x.Posts.Last(),
    PostImage = x.Posts.Last().PostImages.First(),
  })
  .Take(5)
  .ToList();
List data=entity.Categories
.其中(x=>x.PositionId==2)
.Select(x=>newcategoriesPostImagesTo(){
类别=x,
Post=x.Posts.Last(),
PostImage=x.Posts.Last().PostImages.First(),
})
.采取(5)
.ToList();
互联网上有很多关于DTO的信息:

像这样: