Newsgroup: it.comp.lang.visual-basic
Titolo: FW4.0 Linq to XML

Il file è
  <SQLqueries>
.....
    <Query id="Scheletro">
    <descrizione>BLA BLA</descrizione>
    <tipo>SELECT/INSERT/UPDATE/DELETE/STORED/COMMAND</tipo>
    <SQL>
      <![CDATA[
      ...testo query
      ]]>
    </SQL>
  </Query>
....
  </SQLqueries>
io scrivo
        Dim Doc As XDocument
        Doc = XDocument.Load(filepath)
        'linq
        Dim lista = From dato In Doc...<SQLqueries> Select New With { _
                    .descrizione = dato.Element("descrizione").Value, _
                    .tipo = dato.Element("tipo").Value, _
                    .sql = dato.Element("SQL").Value _
                    }
        For Each p In lista
            Console.WriteLine("Trovato {0} {1} {2} {3}", "Letto", 
p.descrizione, p.tipo, p.sql)
        Next
Funziona egregiamente
ma vorrei leggere l'attributo id di <query> e lì fallisce miseramente
        Dim lista = From dato In Doc...<SQLqueries> Select New With { _
                    .chiave = 
dato.Element("Query").Attributes("id").ToString, _
                    .descrizione = dato.Element("descrizione").Value, _
                    .tipo = dato.Element("tipo").Value, _
                    .sql = dato.Element("SQL").Value _
                    }
L'errore è NullReferenceException...sicuramente sbaglio a scrivere 
qualcosa!Sigh!
... :/  mi manca ancora tanto da studiare!
-- 
----- Italliaaaaa 3227! -----
Io sono Attila:
A come atrocità,
doppia T come terremoto e tragedia,
I come ira di dio,
L come laco ti sangue
e A come adesso vengo e ti sfascio le corna!
(Diego Abatantuono "Attila Flagello di Dio")

Wodka40° ha usato la sua tastiera per scrivere :
MAH!
...HO RISOLTO! ma non sò se ho scazzato io o una "breve follia " 
dell'IDE!
Stamani mi sono preso un po di libri (VB2010 di Aspitalia HOEPLI) ed ho 
letto.
Mi sono fatto un progettino di test
Mi sono fatto lo schema XML in automatico...caricato esplicitamente il 
file XML e spippolato con linq....e funziona legge elementi e 
attributi!
copiato il codice linq nel progetto "serio"....non funziona!
Cazzarolina!
Rifai tutto da capo....metti il file XML...costruisci lo 
schema...importa lo schema...
Alla fine va !
Bene mi sono detto....adesso DESTRUTTURA
elimina il file XML e lo schema dal progetto...stacca l'imports dello 
schema...compila...E VA!
UH!!! mi prende per il culo! ...se prima il solito codice non 
funzionava!!!
cmq l'importante è che funzioni
ecco il codice
.....
    Private Function LeggiQuery(ByVal filepath As String)
        Dim Doc As XDocument
        Doc = XDocument.Load(filepath)
        'linq
        Dim pippo = From t In From D In Doc...<Query> _
               Select New With _
                      {.chiave = D.@id, .descizione = 
D.<descrizione>.Value, _
                       .tipo = D.<tipo>.Value.ToString, .querySQL = 
D.<SQL>}
        Stop
      ......
Mah ! Misteri della programmazione moderna!
Proseguiamo vah!....ogni giorno ha la sua pena (lo dice anche il 
Vangelo!)
-- 
----- Italliaaaaa 3227! -----
Il coraggio ce l'ho. E' la paura che mi frega.
(Totò)

 Wodka40° ha usato la sua tastiera per scrivere :
scusate !!!!
copia ed incolla sporco(funzionava uguale ma c'era una lista in più 
inutile):
        Dim pippo = From D In Doc...<Query> _
               Select New With _
                      {.chiave = D.@id, .descizione = 
D.<descrizione>.Value, _
                       .tipo = D.<tipo>.Value.ToString, .querySQL = 
D.<SQL>}
-- 
----- Italliaaaaa 3227! -----
Bisogna sempre dare spontaneamente quello che non si può impedire ti 
venga tolto.
(Vittorio Alfieri)

Ha detto: Wodka40°
Il giorno: giovedì, 01/09/2011
La versione definitiva....se a qualcuno può servire....
filepath è gia stato controllato ed esiste  ed è leggibile
inoltre si è dichiarato in un modulo del progetto
Public ListaSQL As New Dictionary(Of String, Tuple(Of String, String, 
String, String))
    Private Function LeggiQueryFromXMLfile(ByVal filepath As String) As 
Boolean
        Dim Doc As XDocument
        Doc = XDocument.Load(filepath)
        'linq
        Try
            Dim listaQ = From D In Doc...<Query> _
               Select New With _
                      {.chiave = D.@id, .descizione = 
D.<descrizione>.Value, _
                       .tipo = D.<tipo>.Value.ToString, .querySQL = 
D.<SQL>}
            'carica lista queries SQL
            For Each pp In listaQ
                ListaSQL.Clear()
                Dim tt = Tuple.Create(pp.chiave.ToString, 
pp.descizione.ToString, pp.querySQL.ToString, pp.tipo)
                ListaSQL.Add(pp.chiave.ToString, tt)
            Next
            Stop
        Catch ex As Exception
            ListaSQL.Clear()
            Return False
        End Try
        Return True
    End Function
Ovviamente FW 4.0
listaSQL per me significa
   ChiaveDictionary: nome univoco query
   Tupla(Quadrupla): 1) descrizione query
                     2) tipo 
(SELECT/INSERT/UPDATE/DELETE/STORED/COMMAND)
                     3) testo SQL
                     4) libero per il futuro es. data query o flag 
nodisplay
....mi sta a garbare tutta sta complicazione!!!! :') :o)
-- 
----- Italliaaaaa 3227! -----
Grembiule nero e fiocco azzurro: per un bambino milanista il primo 
giorno di scuola è un trauma.
(Diego Abatantuono)

             Next
zac
CORRETTA
            'carica lista queries SQL
            ListaSQL.Clear()
            For Each pp In listaQ
                Dim tt = Tuple.Create(pp.descrizione.ToString, 
pp.querySQL.ToString, pp.tipo, Now.ToShortDateString)
                ListaSQL.Add(pp.chiave.ToString, tt)
            Next
-- 
----- Italliaaaaa 3227! -----
