@using Groceries.Data @using Microsoft.EntityFrameworkCore @layout Layout @inject AppDbContext DbContext Groceries – Items

Items

@(context ? "✓" : "") @* Edit *@
@code { private record ItemModel { public Guid Id { get; init; } public required string Brand { get; init; } public required string Name { get; init; } public bool HasBarcode { get; init; } public DateTime? LastPurchasedAt { get; init; } } private IQueryable items = null!; private PaginationState pagination = new(); [SupplyParameterFromQuery] public string? Search { get; set; } protected override void OnParametersSet() { var itemsQuery = DbContext.Items.AsQueryable(); if (!string.IsNullOrEmpty(Search)) { var searchPattern = $"%{Search}%"; itemsQuery = itemsQuery.Where(item => EF.Functions.ILike(item.Brand + ' ' + item.Name, searchPattern)); } items = itemsQuery .GroupJoin( DbContext.ItemPurchases.Where(purchase => purchase.IsLastPurchase), item => item.Id, purchase => purchase.ItemId, (item, purchases) => new { item, purchases }) .SelectMany( group => group.purchases.DefaultIfEmpty(), (group, lastPurchase) => new ItemModel { Id = group.item.Id, Brand = group.item.Brand, Name = group.item.Name, HasBarcode = group.item.Barcodes.Count != 0, LastPurchasedAt = lastPurchase != null ? lastPurchase.CreatedAt : null, }) .OrderBy(item => item.Brand) .ThenBy(item => item.Name); } }