Využij akce až 30 % zdarma při nákupu e-learningu. Více informací. Zároveň je tento týden sleva až 80 % na e-learning týkající se C# .NET
Hledáme nového kolegu do redakce - 100% home office, 100% flexibilní pracovní doba. Více informací.

Diskuze: C# MVC iterace sloupců modelu

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
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
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í
+1 bodů
Ř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.