vbdotnet.it

Tricks & tips, workaround, forum and ideas with .Net

About the author

Enrico Rossini è il gestore di questo blog.
E-mail me Send mail

Recent posts

Recent comments

Contributi

Best 6 ~ 6 users ~ 6 comments

Info legali

Le opinioni espresse in questo blog sono strettamente personali e ogni persona è responsabile dei commenti che inserisce. I marchi citati sono delle rispettive aziende.

© Copyright 2010

Advertising


Group by multipli e alias ai campi

Titolo quanto meno complesso. Partiamo da un esempio per spiegarmi meglio:

query = From a In eDao.MagazzinoArticoli Join m In eDao.MagazzinoMovimenti On a.IDArticolo Equals m.Articolo _
        Where m.Data <= tmp _
        Group By a.IDArticolo, a.CodArticolo, a.Descrizione, a.Fornitore, a.FornitoreCodice, a.PrezzoNetto1, a.UnitaMisura _
        Into car = Sum(m.QtaCaricata), scar = Sum(m.QtaScaricata), ret = Sum(m.QtaRettificata), imp = Sum(m.QtaImpegnata) _
        Select IDArticolo, CodArticolo, Descrizione, Fornitore, FornitoreCodice, QtaCaricata = car, QtaScaricata = scar, QtaRettificata = ret, _
               QtaImpegnato = imp, PrezzoNetto1, UnitaMisura

Esistono due tabella denominate MagazzinoArticoli (dove è presente la definizione degli articoli di un magazzino) e la tabella MagazzinoMovimenti (che raccoglie per ogni articoli i movimenti di carico e scarico). C'è il join tra le due tabelle e la condizione where sulla data del movimento. Il group by deve essere definito su tutti i campi su cui si esegue il raggruppamento. Dopo il comando Into si definisce una variabile alla quale dare il valore di un'oeprazione che nell'esempio è sempre un Sum.

Quando sono al select e devo specificare i campi, posso creare degli alias come se definissi una variabile. Attenzione: non è possibile riferirsi ai valori a ed m che identificano le due rispettive tabelle.

Ciao a presto!

 

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Posted by enrico on Monday, May 31, 2010 7:35 PM
Permalink | Comments (0) | Post RSSRSS comment feed

Linq e uno o più Left Outer Join

Avendo perso anche tutto il pomeriggio della giornata di oggi a capire come fare in Linq un banale Left Outer Join, vi posto la query in Linq che ho realizzato.

qry = From f In eDoc.Fatture Where f.Data <= tmp Group Join pn In eDoc.PrimaNota On f.IDFattura Equals pn.FatturaID Into fv = _
      Group From p In fv.DefaultIfEmpty Join a In eDoc.Anagrafiche On f.Anagrafica Equals a.IDAnagrafica _
      Where f.Data <= tmp And (p.Data >= tmp Or p.Data Is Nothing) And (f.Annullata Is Nothing Or f.Annullata >= tmp) _
      Select a.IDAnagrafica, f.IDFattura, f.Numero, f.TipoDocumento, a.RagSoc, a.Nome, f.Data, f.Scadenza, f.TotaleImponibile, _
      f.TotaleDocumento, f.TotaleIVA, f.Anticipata, f.AnticipataImporto, f.AnticipataBanca, f.AnticipataData, f.AnticipataPercentuale, f.Riscossa, f.Annullata


Spero che vi sia utile!

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Categories: management | vb.net
Posted by enrico on Friday, May 21, 2010 8:55 PM
Permalink | Comments (0) | Post RSSRSS comment feed

Funzione Max con condizione in Linq

Vi faccio un caso reale. Pensate di avere una tabella delle fatture con i campi Numero (per il progressivo della fattura) in formato int, Data di emissione in formate datetime e tipologia di documento in formato int (fattura, proforma, ddt, ecc). Ammettiamo che vi interessi conoscere il massimo valore presente nel campo Numero tenendo conto dell'anno (partendo dalla data corrente) e della tipologia di documento. Come fare senza incorrere in errori strani? Ecco la semplice soluzione (eDoc è il LinqToSQL, DataDocumento e TipoDocumento sono due variabili di servizio)

   1:  max = Aggregate p In eDoc.Fatture Where p.Data.Value.Year = Year(DataDocumento) And _
   2:        p.TipoDocumento.Value = TipoDocumento Into m = Max(p.Numero)

Interessante secondo me il modo in cui si confronta l'anno da database con l'anno da variabile: infatti se provi ad utilizzare Year(p.Data) comincia a dare errori impossibili del tipo "Non sono supportate conversioni a SQL per il metodo 'Int32 Year(System.DateTime)" che poi non riesci neanche a trovare qualcuno in internet che abbia avuto il tuo stesso problema!

Per evitare di avere errori nel caso in cui non ci siamo record che soddisfano la condizione, ti consiglio di mettere un bel Try...Catch!

Currently rated 1.0 by 1 people

  • Currently 1/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Posted by enrico on Tuesday, August 05, 2008 9:44 PM
Permalink | Comments (0) | Post RSSRSS comment feed