0

我的表关系:

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();

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

4

2 回答 2

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>,但它会得到(只是)你需要的数据。

于 2013-03-14T10:41:47.857 回答
1

我建议您使用数据传输对象(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();

网上有很多关于 DTO 的资料:

像这样: ADO.NET EF - 当我们有外键时填充 DataGridView

于 2013-03-14T11:59:22.267 回答