Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: GroupBy více polí různých podmínek

Aktivity
Avatar
Adam Gajdečka:1.2.2021 19:46

Ahoj, potřebuji radu. Mám .NET Core 5 web aplikaci, kde chci mít vyhledání stejně jako alza (viz v příloze), kde lze naklikat jen do filtrů to, co tam mají (tedy zobrazovat počty podle aktuálního vybrání). Lze si toto vytáhnout jedním SQL dotazem? Používám Entity Framework, nepíšu přímo SQL dotazy. Používám MSSQL databázi.

Zkusil jsem: Zatím to mám pro každé pole zvlášť, takže těch dotazů na db je mnoho. Je potřeba si uvědomit, že když potřebuji počty pro "šířky pneumatik", tak tam nemůžu zahrnout aktuálně vybranou šířku. Takže "zdroj" dat je vždy jiný pro každé pole, vždy tam vyjmu tu hodnotu, pro kterou potřebuji počty získat.

var widthOptions = productsExceptWidths //vrací IQueryable<Product>
                       .Where(s => s.TireWidth != null)
                       .GroupBy(s => new { s.TireWidth })
                       .Select(group =>
                               new ProductSearchOption(group.Key.TireWidth ?? 0, group.Key.TireWidth.ToString(), group.Count())
                       ).ToList();
          model.Widths.AddRange(widthOptions);

Tady získám počty pro šířky pneumatik. TireWidth je integer

var heightOptions = productsExceptHeights
    .Where(s => s.TireHeight != null)
           .GroupBy(s => new { s.TireHeight })
           .Select(group =>
                   new ProductSearchOption(group.Key.TireHeight ?? 0, group.Key.TireHeight.ToString(), group.Count())
           ).ToList();
model.Heights.AddRange(heightOptions);

atd pro každé pole ve formuláři

Chci docílit: Potřebuji co nejrychleji dostat tyto počty z databáze. Přidal jsem k těmto vlastnostem INDEX. Co dále můžu udělat? Díky

 
Odpovědět
1.2.2021 19:46
Avatar
zelvicek
Člen
Avatar
zelvicek:2.2.2021 8:14

Nejsem Alza vývojář, ale předpokládám, že to budou mít nějak předpočítané - např.: MSSql Cube.
Ten katalog je víceméně read-only. Po aktualizaci katalogu prostě vygenerujou nové filtry a počty, ty uloží do separátních tabulek.

 
Nahoru Odpovědět
2.2.2021 8:14
Avatar
Adam Gajdečka:2.2.2021 9:30

Je potřeba si uvědomit, že ty počty nelze předvypočíst. Těch kombinací je strašně moc. Když vybereš třeba mobil s NFC, musí ti přepočítat dle toho všechno ostatní. To je prostě blbost. Musí to tahat rovnou z databáze...

 
Nahoru Odpovědět
2.2.2021 9:30
Avatar
zelvicek
Člen
Avatar
Odpovídá na Adam Gajdečka
zelvicek:2.2.2021 11:21

Dobrá, pak se mýlím a nedokážu ti pomoci.

 
Nahoru Odpovědět
2.2.2021 11:21
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.