2012-04-22 16 views
0

カテゴリとサブカテゴリがあります。各サブカテゴリにはいくつかの製品があります。 例:プログラミングカテゴリには| C#、java、基本的なサブカテゴリ| c#はc#3、c#3.5は製品です。 javaにはjava ee、java meなどがありますpagination in asp.net mvc

linqからEFを使用してカテゴリから10の製品を選択します。

問題は、データベースからすべての製品を読み込み、ソートして10個を選択したくないということです。

私はデータベースからすべての製品をデータベースからWebサーバーに転送せずに、データベースから10個の製品を取ることができます。

私はEFが欲張りで、わずか10個の製品しか使用しないと知っています。カテゴリとサブカテゴリがある私の場合は、最初にカテゴリに属する​​異なるサブカテゴリからすべての製品を選択し、それらをリストに追加してすべての製品をサーバに持ち込み、そのうち10個を選択する必要があると思います。

私はすべての製品をサーバーに転送する必要がないため、ベストプラクティスは何ですか?

+0

あなたはあなたのためのページングなどを行うためにhttps://github.com/TroyGoode/PagedListのようなものを使用することができところで – Manatherin

+0

私はその少し複雑にいるのを見ました私は何をしたいのですか? – 1AmirJalali

答えて

2

あなたは1つのクエリでこれを行うことができます:

var pagedProducts = _db.Categories.Join( 
    _db.Products, 
    c => c.CategoryId, 
    p => p.CategoryId, 
    (Category, Products) => 
     new 
     { 
      CategoryType = Category, 
      ItsProducts = Products 
     }) 
     .OrderBy(g => g.Category.Name) 
     .Skip((CurrentPage - 1) * pageSize) 
     .Take(pageSize); 
+0

ソートはどうですか?最初にソートしてから改ページしてはいけませんか?どのようにそれを並べ替えるには? – 1AmirJalali

+0

@cSharpperページネーションがページを正しく取得できるようにするには、 'Take'と' Skip'の前に 'OrderBy'を設定するか、少なくともデフォルトの順序を維持してください。 –

+0

あなたのコードは正しいですが、私はついにこのコードを書いた:var categoryModel = storeDB.Categories.Single(c => c.CategoryId == categoryId); var subCategoriesModel = storeDB.SubCategories.Where(c => c.CategoryId == categoryModel.CategoryId); var subcategoriesID = subCategoriesModel.Select(s => s.SubCategoryId).ToList(); var products =(storeDBのpから) subcategoriesID.Contains(p.SubCategoryId) select p).OrderBy(p => p.ProductId).Skip((page-1)* pageSize).Takeページサイズ); – 1AmirJalali