[ patak_daca @ 31.03.2015. 13:41 ] @
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
[ patak_daca @ 31.03.2015. 15:53 ] @
Mozda neki predlog....
[ mmix @ 31.03.2015. 16:58 ] @
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.
[ patak_daca @ 31.03.2015. 17:44 ] @
Pozdrav!

Hvala puno!!

a taj keyValuePair da popunim u " Select new " ili nekako drugacije?
[ mmix @ 31.03.2015. 18:11 ] @
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)
     };
 
[ patak_daca @ 31.03.2015. 18:22 ] @
Hvala puno!

[ patak_daca @ 31.03.2015. 19:39 ] @
Pozdrav!

Jel može pomoć...

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

Hvala!!
[ mmix @ 31.03.2015. 20:10 ] @
Onda ne grupises u gr nego samo selektujes keypair(r.radnik, r.broj)
[ patak_daca @ 31.03.2015. 20:29 ] @
Pa da..to je to..

Hvala puno!!

[ patak_daca @ 01.04.2015. 11:58 ] @
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
[ patak_daca @ 01.04.2015. 13:45 ] @
Neki predlog....
[ Shadowed @ 01.04.2015. 13:51 ] @
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]
[ patak_daca @ 01.04.2015. 18:00 ] @
Pozdrav!

Hvala puno!!
[ patak_daca @ 02.04.2015. 10:36 ] @
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
[ mmix @ 02.04.2015. 11:11 ] @
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.

[ patak_daca @ 02.04.2015. 11:22 ] @
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
[ patak_daca @ 02.04.2015. 19:59 ] @
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
[ patak_daca @ 02.04.2015. 20:42 ] @
može i neki predlog...
[ mmix @ 02.04.2015. 22:17 ] @
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:

[ patak_daca @ 03.04.2015. 17:06 ] @
Pozdrav!!

Hvala puno!!
[ patak_daca @ 03.04.2015. 18:03 ] @
Pozdrav!

Molim za pomoć...

U var output = ........

Dobijam grešku "Local sequence cannot be used in LINQ to SQL implementations of query operators except the Contains operator."

Ako neko zna...

Hvala puno!!
[ patak_daca @ 03.04.2015. 20:05 ] @
Pozdrav!

Možda neki savet...predlog...
[ patak_daca @ 03.04.2015. 21:38 ] @
Pozdrav!

Probao sam i ovako....

Code:
var output = from a in queryX
                 group a by a.Vrsta_rada into gr
                 select new { Vrsta_rada = gr.Key, Radnici = from r in gr                                                                  
                                         where  radnici.Contains(r.Radnik) 
                                         select r
                 };


Ovo radi bez greške ali ne prikazuje i one radnike koji nisu radili posao u određenoj grupi..

Molim za pomoć...

Patak
[ patak_daca @ 04.04.2015. 09:03 ] @
Pozdrav!

ako neko zna....može pomoć...
[ patak_daca @ 04.04.2015. 10:18 ] @
Pozdrav!

Mislim da sam našao rešenje...

Code:
queryX  ..ostaje

 var radnici = queryX.Select(k => k.Radnik).Where(n => n != null).Distinct(); 
 
 
              
 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 => (int?) b.Broj) ?? 0
                                                             
                                                            
                 };


Ako nekog muči isti problem možda je ovo rešenje....
[ patak_daca @ 04.04.2015. 12:20 ] @
Pozdrav!

Molim za pomoć...

Kako da rezultat ovog upita prebacim u model ?

Code:
var radnici = queryX.Select(k => k.Radnik).Where(n => n != null).Distinct();


Model:

Code:
public class Radnici

    {

        public string ime { get; set; }
    
    
    }


Malo sam zapeo....

Hvala!
[ Shadowed @ 04.04.2015. 14:08 ] @
Hm, pa tebi je model jedan radnik a rezultat ti je lista radnika. Pri tome je ime modela u mnozini pa nije bas jasno sta si hteo.
[ patak_daca @ 04.04.2015. 14:12 ] @
Pozrav!

Jedan model su radnici za kreiranje kolona
a u drugom modelu su vrste poslova i suma urađenih poslova za radnike

možda sam malo zakomplikovao ali da bi se uradio Pivot mislim da ne može jednostavno...

Hvala!
[ patak_daca @ 04.04.2015. 14:36 ] @
Pozdrav!

Uspeo sam da rešim....

Puno hvala mmix i Shadowed na pomoći !!

Radio sam u LINQpad pa malo sam se namučio to da prenesem u Asp.net mvc ali sam uspeo..

Ako nekog muči isti problem neka se javi ....

Patak!