Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 10 odgovora
  • 2.863 pregleda

Najnovija ↓

DataSet i podaci 16.03.2009. u 15:47 · pre 214 meseci #1
Pozdrav svima,

imam Dataset, koji u sebi sadrzi podatke kao sto su ime i vriejdnost. Imena se ponavljaju ali vrijednosti ne.

Moze li mi neko reci kako cu iz tog Dataseta da pokupim samo imena koja se ne ponavljaju. Ako se ime ponavlja, vrijednost tre bam samo dodat na postojece ime.

Znaci imam:

OsobaA 4
OsobaA 23
OsobaB 3
OsobaA 5
OsobaB 65
OsobaA 12

Kako da dobijem:

broj jedinstvenih imena,

sve vrijednosti vrijednosti za svako ime, npr.

OsobaA 4,23,5,12
OsobaB, 3,65


Radim u C#...
Poz
Re: DataSet i podaci 16.03.2009. u 16:29 · pre 214 meseci #2
Jedno resenje sa LINQ-om:


Code:



string []Posebno = (from r in Tabela2.AsEnumerable()
                              select (string)r["Osoba"]).Distinct().ToArray<string>();

Grupe[] lista = (from r in Tabela2.AsEnumerable()
                        group r by (string)r["Osoba"] into tmp
                        select new Grupe(tmp.Key,
                                                  tmp.Select(s => (int)s["Vrednost"]).ToList<int>())).ToArray<Grupe>();





Pri tome je definisana struktura:

Code:

    struct Grupe
    {
        public string Osoba;
        public List<int> vrednosti;

        public Grupe(string x, List<int> y)
        {
            Osoba= x;
            vrednosti = new List<int>();
            vrednosti.AddRange(y);
        }
    }
Re: DataSet i podaci 16.03.2009. u 18:22 · pre 214 meseci #3
Code:

Hashtable tabelaImena = new Hashtable();
foreach (DataRow dr in tabela.Rows)
{
   if (dr.RowState != DataRowState.Deleted)
   {
       if (tabelaImena.ContainsKey((string)dr["ime"])
        {  
             (ArrayList)(tabelaImena[(string)dr["ime"]]).Add((int)dr["vrednost"]);
            }
       else
       {
           tabelaImena.Add((string)dr["ime"],new ArrayList());
           (ArrayList)(tabelaImena[(string)dr["ime"]]).Add((int)dr["vrednost"]);
       }
   }

}
ArrayList rezultat = new ArrayList();
foreach (object key in tabelaImena.Keys)
{
   StringBuilder sb= new StringBuilder((string)tabelaImena[key]);
   foreach (int br in (ArrayList)tabelaImena[key])
   {
      sb.Applend(" "+ br.ToString()+",");
   }
   rezultat.Add (sb.Trim(new char[]{','}).ToString());
}

eo jos jedna skica (ne treba .net 3.5). druga foreach petlja bi se mogla izbeci ako bi se u HashTable umesto parova (string, ArrayList), sadrzao parove (string,string)
Re: DataSet i podaci 16.03.2009. u 21:35 · pre 214 meseci #4
@Igor, moze to i da se "ulepsa" malo kroz "Linq to DataSet" ;)
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: DataSet i podaci 16.03.2009. u 21:54 · pre 214 meseci #5
Pozdrav,

@salle

moze li jos malo pomoci? Compajler mi javlja gresku na ovoj liniji( i u if i u else diejlu)

(ArrayList)(tabelaImena[(string)dr["ime"]]).Add((int)dr["vrednost"]);

Error 2 'object' does not contain a definition for 'Add'
Re: DataSet i podaci 16.03.2009. u 22:31 · pre 214 meseci #6
Ok, ovo sam jednostavno pretvorio u dva dijela i radi. Medjutim javlja se druga greska a to je cast odnosno na ovoj liniji::

StringBuilder sb= new StringBuilder((string)tabelaImena[key]);

Ovaj string cast ne valja, ali ne kontam sta dodje tu? Koji tip?
Re: DataSet i podaci 17.03.2009. u 01:49 · pre 214 meseci #7
jes ne valja... sorry

StringBuilder sb = new StringBuilder ((string)key);

a ovaj drugi red sto ti je javljao gresku bi trebalo da stoji verovatno (mrzi me da palim vs):

((ArrayList)(tabelaImena[(string)dr["ime"]])).Add((int)dr["vrednost"]);
Re: DataSet i podaci 17.03.2009. u 12:06 · pre 214 meseci #9
pa distinct je prost, ali agregacija stringova je slaba tacka SQL-a, morao bi da se uradi neki UDF koji bi "sabrao" drugu kolonu za parametar prve kolone i onda bi radilo.


Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: DataSet i podaci 18.03.2009. u 21:44 · pre 214 meseci #10
Hvala Salle na odgovoru, radi sve.

@mmix : slazem se sa tobom

@toxi
query koji ja radim je neki customized query language odnosno tzv. A-SQL koji ne podrzava agregatne funkcije, osim count.
Jednostavno moram da se koristim njim, tako da je ovo za mene idealno rijesenje. Sve i da mogu SQL, ne bi bilo bas jednostavno, kao sto mmix rece..

Hvala u svakom slucaju svima
Re: DataSet i podaci 18.03.2009. u 22:27 · pre 214 meseci #11
@mmix

Evo malo lepse:

Code:

Console.WriteLine((from r in Tabela2.AsEnumerable()
                            select r["Osoba"]).Distinct().Count());


(from r in Tabela2.AsEnumerable()
  group r by r["Osoba"] into tmp
  select new {o=tmp.Key,v=tmp.Aggregate("",(av,s)=> {return  av+","+s["Vrednost"];}).Trim(',')})
.ToList()
.ForEach(s => Console.WriteLine(s.o+"  :  "+s.v+Environment.NewLine));


;)
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme