Базовый набор свойств, связанных с элементом продукта, должен быть дополнен свойствами навигации с подробностями, связанными с конкретным клиентом (может быть нулевым), количеством в магазинах (может быть нулевым) и действиями (список кодов действий, возможно, пустой список или ноль).
Свойства навигации «Клиент» и «магазин» могут быть заполнены только для возвращаемой страницы (скажем, 20 элементов из, скажем, 20 элементов). 5000).
Однако действия могут использоваться сначала для фильтрации только подмножества продуктов, а также могут использоваться для заказа (в том смысле, что сначала показывать продукты, предлагаемые в каком-либо действии - думайте в терминах "новинка", "распродажа", "11+1бесплатно"). Следовательно, его, вероятно, необходимо получить другим способом (чем клиент или магазин). Фильтрацию и упорядочивание необходимо выполнить до .Skip(skipResults).Take(pageSize), сведения о клиенте и магазине можно будет получить позже, после того, как элементы страницы будут найдены (я не знаю, какие методы EF Core транслируются в какую конструкцию SQL, чтобы сделать их наиболее эффективными).
Код: Выделить всё
public async Task GetAllAsync( // (0)
string? customerCode,
string? filterAction,
int pageNumber = 1, int pageSize = 10)
{
DateTime now = DateTime.Now; // for determining the valid actions
var products2 = dbContext.Products // (1) public DbSet Products { get; set; }
...like: ProductCode, ProductName, CatalogPrice ...
customer = ... dbContext.CustomerProducts // (2) public DbSet
...customer-related, like: CustomerPrice...
storage = ... available quantity on several stores...
actions = dbContext.ProductAttributes // (3) list of ProductAttribute
.Where(x => x.ValidFrom
Подробнее здесь: [url]https://stackoverflow.com/questions/79832646/how-to-async-fill-the-navigation-property-used-for-filtering-when-paging[/url]
Мобильная версия