我在使用EF Code First后端的MVC应用程序中工作。我有一个产品表,我想按类别或品牌进行分页和过滤。
我不确定最好的方法是什么,并且随意指出我的方式的愚蠢,但是现在我在上面的页面中有以下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;
}
但上述情况似乎无效!我在ViewModel中返回200个产品,因为那是我的recordsPerPage
,因此我只能获得10个。
我哪里错了?
答案 0 :(得分:1)
LINQ方法不会修改应用它们的序列,它们会生成新序列作为返回值。您需要使用LINQ操作的返回值! <{1}}不会受到方法调用的影响。
示例:
class MyAlgo<T> : where T has X and Y properties {}