私はMVCアプリケーションでEFコードファーストバックエンドで作業しています。カテゴリーやブランド別にページを設定してフィルタリングしたい商品テーブルがあります。LINQによる製品テーブルのフィルタリング
私はこれを行うための最善の方法であり、私の道のsillynessを指すように自由に感じかわからないんだけど、今の私は上記のページについては、以下のViewModelを持っている:
public class InventoryReportViewModel
{
public SearchViewModel Search { get; set; } // 2 string props [Type and Term]
public IEnumerable<ProductViewModel> Products { get; set; }
public PaginationViewModel Pagination { get; set; } // 3 int props [currentPage, recordsPerPage, totalRecords]
}
私はここに私のLINQクエリを構築し、自分自身を繰り返したくない、とどの程度スマートになりたい
は私の試みです:
public InventoryReportViewModel GetProducts(int page, string searchTerm, string searchType)
{
var activeProducts = _context.Products.Where(p => !p.IsDeleted);
if (!string.IsNullOrEmpty(searchTerm))
{
if (searchType == "category")
{
activeProducts.Where(
p => string.Equals(p.Category.Name, searchTerm.Trim(), StringComparison.CurrentCultureIgnoreCase))
.OrderBy(p => p.Category.Name)
.Skip(_recordsPerPage * (page - 1))
.Take(_recordsPerPage);
}
else
{
activeProducts.Where(
p => string.Equals(p.Brand.Name, searchTerm.Trim(), StringComparison.CurrentCultureIgnoreCase))
.Skip(_recordsPerPage * (page - 1))
.Take(_recordsPerPage);
}
}
else
{
activeProducts.Skip(_recordsPerPage * (page - 1)).Take(_recordsPerPage);
}
var productPageVm = new InventoryReportViewModel
{
Products = ProductViewModelFactory.BuildListOfProductViewModels(activeProducts),
Pagination = new PaginationViewModel
{
CurrentPage = page,
RecordsPerPage = _recordsPerPage,
TotalRecords = _context.Products.Count(p => p.Quantity > 0 && !p.IsDeleted)
}
};
return productPageVm;
}
しかし、上記のようではありません。仕事に!それが私のrecordsPerPage
であるので、私はわずか10を取得する必要があるとき、私は200の製品がViewModelで返されます。
どこが間違っていますか?
? –
web.configから私はコンストラクタでそれを読んでいます。私はデバッグして、すべての私のページネーションのプロパティは、彼らがする必要があることを確認することができます – Ciwan