• 28 odgovora
  • 9.819 pregleda
Linq kreiranje "pivot -a" 31.03.2015. u 13:41 · pre 140 meseci #1
Pozdrav!

U upitu

Code:
var queryX = from a in Tikets
 join pm in VrsteRadovas on a.Id_vrste_rada equals pm.Id_vrste_rada
 where a.Aktivan == 1 && a.Id_statusa_tiketa != 2                  
 group new { a,pm } by new { a.Id_vrste_rada, pm.NazivVrsteRada, a.DodeljenKorisniku }  into g       
                        
select new
    {
        Count=g.Key.Id_vrste_rada,
    Vrsta_rada=g.Key.NazivVrsteRada,
    Radnik=g.Key.DodeljenKorisniku,
    Broj=g.Count()
       
    };

queryX.ToList();
            
        
var aa = from b in queryX  group b by b.Vrsta_rada into g
            

select new
    {

     Name = g.Key,
     Korisnik1 = g.Where(c => c.Radnik.Equals("Korisnik1")).Select(c => c.Broj),
     Korisnik2 = g.Where(c => c.Radnik.Equals("Korisnik2")).Select(c => c.Broj)

    };

aa.ToList();

aa.Dump();



Kako da Korisnk1 , Korisnik2... ne moram da unosim nego da na osnovu prvog upita preko neke loop ili nečeg
automatski kreira kolone jer već imam te podatke u "DodeljenKorisniku " ?

Hvala!

Patak
Re: Linq kreiranje "pivot -a" 31.03.2015. u 16:58 · pre 140 meseci #3
To je Pivot, i koliko znam nema boljeg nacina jer se ne moze kreirati klasa sa dinamickim brojem polja. Ono sto mozes je da imas Neki KeyValuePair<string, int> u koji ces upucati variabilan broj korisnika sa countovima pa onda na view strani to rzvuces u varijabilan broj vizuelnih kolona.
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: Linq kreiranje "pivot -a" 31.03.2015. u 17:44 · pre 140 meseci #4
Pozdrav!

Hvala puno!!

a taj keyValuePair da popunim u " Select new " ili nekako drugacije?
Re: Linq kreiranje "pivot -a" 31.03.2015. u 18:11 · pre 140 meseci #5
Da. Sa tim sto ces morati da radis select u select-u da bi zadrzao top level grupisanje po Vrsti rada . Dakle nesto tipa


Code (csharp):

select new
     {

      Vrsta_rada = g.Key,
      Korisnici =
            from r in g
            group by r.Radnik into gr
            select new KeyValuePair<string, int>(gr.Key, gr.Count)
     };
 
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: Linq kreiranje "pivot -a" 31.03.2015. u 19:39 · pre 140 meseci #7
Pozdrav!

Jel može pomoć...

Kako da ubacim gr.Count da ima vrednost Broj iz prvog upita ?

Hvala!!
Re: Linq kreiranje "pivot -a" 31.03.2015. u 20:10 · pre 140 meseci #8
Onda ne grupises u gr nego samo selektujes keypair(r.radnik, r.broj)
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: Linq kreiranje "pivot -a" 01.04.2015. u 11:58 · pre 140 meseci #10
Pozdrav!

Kada hoću da podatke "ubacim" u model

Model:

Code:
namespace Vezbe_sa_DIV.Models
{
    public class IzvestajPoRadniku
    {


        public string Name { get; set; }
        public IEnumerable<Stavke> Korisnici { get; set; }
       
       
}
public class Stavke
{
    public int  Broj {get;set;}
    public string Radnik {get;set;}
  
   
  
   
}
}


Linq upit:

Code:
select new IzvestajPoRadniku
                      {
                          Name = g.Key,

                          Korisnici = from r in g 
                                      
                                      select new Stavke { KeyValuePair<int, string>(r.Broj, r.Radnik)}
                      };


Dobijam grešku....

Molim za pomoć!

Patak
Re: Linq kreiranje "pivot -a" 01.04.2015. u 13:51 · pre 140 meseci #12
Ovaj deo ti je neispravan:
Code:
select new Stavke { KeyValuePair<int, string>(r.Broj, r.Radnik)}

Treba
Code:
select new Stavke { Broj = r.Broj, Radnik = r.Radnik}


[Ovu poruku je menjao Shadowed dana 02.04.2015. u 10:54 GMT+1]
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Re: Linq kreiranje "pivot -a" 02.04.2015. u 10:36 · pre 140 meseci #14
Pozdrav!

Kada uradim Pivot na ovaj način pojavi se različit broj kolona jer
nije svaki radnik uradio iste poslove, pa se plašim da nije moguće dobiti Pivot ako ne znamo
koliko ima kolona....

Ako neko ima predlog i pomoć....

Patak
Re: Linq kreiranje "pivot -a" 02.04.2015. u 11:11 · pre 140 meseci #15
Onda moras malo da uradis iz vise koraka. Moras prvo da napravis distinct listu svih prisutnih radnika u sors listi i da onda radis outer join izmedju tvoje liste i te liste i da ubacis 0 tamo gde ne postoji radnik


Primeri outer joina u linq-u.
https://msdn.microsoft.com/en-...io/ee908647.aspx#leftouterjoin


Odmah da ti kazem EF.NET je glup za ovo. Napravice ti stotine SQL poziva. Najbolje je da sors listu ucitas preko EF.NET u neki array ili list i da onda koristis Linq na in-memory objektima.

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: Linq kreiranje "pivot -a" 02.04.2015. u 11:22 · pre 140 meseci #16
Pozdrav!

Hvala puno1

I ja sam hteo da prvo uradim distinct radnika i da ih učitam preko loop-a u Select new... ali to ne može..

Probaću tvoj primer..

Hvala!

Patak
Re: Linq kreiranje "pivot -a" 02.04.2015. u 19:59 · pre 140 meseci #17
Pozdrav!

Molim za pomoć...

U "aa" imam grupisane podatke vrsti posla o radnicima koji su radili te poslove..

U "bb" imam listu radnika ( distinct ) iz liste "aa"....

Kako da u "Korisnici" dodam radnike koji nisu radili taj posao i dodelim im "broj"=0

Probao sam po mmix - ovom predlogu ali mi ne ide....

evo code

Code:
var queryX = from a in Tikets
                          join pm in VrsteRadovas on a.Id_vrste_rada equals pm.Id_vrste_rada
                          where a.Aktivan == 1 && a.Id_statusa_tiketa != 2
                         

                          group new { a, pm } by new { a.Id_vrste_rada, pm.NazivVrsteRada, a.DodeljenKorisniku } into g

                          select new 
                          {
                              Count = g.Key.Id_vrste_rada,
                              Vrsta_rada = g.Key.NazivVrsteRada,
                              Radnik = g.Key.DodeljenKorisniku,
                              Broj = g.Count()

                          };

             queryX.ToList();
             
var aa = from b in queryX

                      group b by b.Vrsta_rada into g

                      select new 
                      {
                          Name = g.Key,

                        Korisnici = from r in g

                                    select new  { Broj = r.Broj, Radnik = r.Radnik }


                      };
                      
                      
var bb =  from p in Tikets 

         group p by p.DodeljenKorisniku
         
         into radnici         
                 
        select new
    { 
    
    radnici=  radnici.Key == null ? "(Nedodeljen)" : radnici.Key  
    
    }
 

;        
    
bb.ToList();

aa.Dump();


Molim za pomoć..

Patak
Re: Linq kreiranje "pivot -a" 02.04.2015. u 22:17 · pre 140 meseci #19
nakon sto dobijes queryX u listi uradis sledece:

Code (csharp):

    var radnici = queryX.Select(k => k.Radnik).Distinct().ToArray();
             
    var output = from a in queryX
                 group a by a.Vrsta_rada into gr
                 select new { Vrsta_rada = gr.Key, Radnici = from r in radnici
                                                       join a in gr on r equals a.Radnik into rjouter
                                                      select rjouter.Sum(b => b.Broj)
                 };

    var model = new { radnici, output };
    model.Dump();
 


Dobices model sa spiskom kolona za pivot tabelu i onda grupisanu listu vrednosti unutar svake vrste rada izlistano po imenima radnika:

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ć
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme