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的信息:
像这样: