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: C# MVC iterace sloupců modelu

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Horas
Člen
Avatar
Horas:17.10.2018 10:51

Jak projít všechny sloupce tabulky (počet sloupců cca 50), kterou mám jako model?

model.Produkty = db.produkty.To­List();
var nazvySloupcu = model.Produkty­.First().GetTy­pe().GetProper­ties().Select(n => n.Name);

Zkusil jsem: // pro jede sloupec to zjistím
var celkem = model.Produkty­.Where(s => s.sloupec1 != null).Count();

// pro více sloupců nevím jak nadefinovat iteraci s proměnnou názvu sloupce
foreach (string nazSL in nazvySloupcu)
{
var celkem = model.Produkty­.Where(s => s. + nazSl != null).Count();
if (celkem>0) {...}
}

Chci docílit: Potřebuji zjistit, zda jsou ve sloupcích nějaké hodnoty != NULL.

 
Odpovědět
17.10.2018 10:51
Avatar
Odpovídá na Horas
don.jarducius:17.10.2018 19:17

Ahoj,
jdeš na to správným směrem... Upravím ti kód pro 1 řádek: (píšu to z hlavy, takže bude občas potřeba něco poupravit)

var produkt = model.Produkty.First();
var sloupce = produkt.GetType().GetProperties();
var pocet = 0;
foreach(var sloupec in sloupce)
{
        if (sloupec.GetValue(produkt, null) == null)
                pocet++;
}
Nahoru Odpovědět
17.10.2018 19:17
Ten kdo nechce hledá důvod, ten kdo chce hledá způsob
Avatar
Horas
Člen
Avatar
Odpovídá na don.jarducius
Horas:18.10.2018 15:06

Díky za reakci. Toto řešení porovnává hodnoty pouze v prvním řádků tabulky. Já potřebuji získat srovnání hodnot v celém každém sloupci.
Snažím se vyřadit sloupce kde je všude NULL, "" nebo 0 a ve zbylých získat DISTINCT hodnoty.
Nevím jak tvé řešení zakomponovat třeba do SELECTU.
Předem děkuji za jakékoliv vodítko.

Editováno 18.10.2018 15:07
 
Nahoru Odpovědět
18.10.2018 15:06
Avatar
don.jarducius:18.10.2018 20:24

Promiň nevšiml jsem si že chceš všechny jedinečné ne-nullové hodnoty, ty sloupce jsou všechny stejného typu např. decimal, nebo různé? … ikdyž asi to bude víceméně jedno.
… opíšu z hlavy, nemusí to být úplně dobře napsané, a je to se zachováním typu tzn. 1 != "1"

var produkt = model.Produkty.First();
var sloupce = produkt.GetType().GetProperties();
var neNullUnikatniHodnoty = new List<object>();
foreach(var radek in model.Produkty)
{
        foreach(var sloupec in sloupce)
        {
                object hodnotaSloupce = sloupec.GetValue(radek, null);
                if (hodnotaSloupce != null && !neNullUnikatniHodnoty.Contains(hodnotaSloupce))
                        neNullUnikatniHodnoty.Add(hodnotaSloupce);
        }
}
Editováno 18.10.2018 20:25
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
18.10.2018 20:24
Ten kdo nechce hledá důvod, ten kdo chce hledá způsob
Avatar
Horas
Člen
Avatar
Odpovídá na don.jarducius
Horas:19.10.2018 11:11

Dobře ty. To je přesně ono. Díky

 
Nahoru Odpovědět
19.10.2018 11:11
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 5 zpráv z 5.