0

私のテーブル関係:

CategoriesたくさんPostsあります たくさんありますPostImages

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

}

そして、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 - 外部キーがある場合に DataGridView を設定します

于 2013-03-14T11:59:22.267 に答える