我的表关系:
Categories
有许多Posts
有很多PostImages
我想检索类别> 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();
问题:有没有一种优雅的方式来实现这个目标?是否通常使用嵌套关系表的预先加载?
答案 0 :(得分:2)
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();
您最终会获得List<anonymous>
,但它会获得您需要的数据。
答案 1 :(得分:1)
我建议您使用数据传输对象(DTO)。只需创建新类:
public class CategoriesPostPostImagesDto
{
public Categories Category {get;set;}
public Posts Post {get;set;}
public PostImages PostImage {get;set;}
}
然后从DB中选择数据。
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();
互联网上有很多关于DTO的信息:
像这样: ADO.NET EF - populate DataGridView when we have Foreign Key