Linq-to-xml Query Dinamica

lunedì 16 gennaio 2012 - 11.56
Tag Elenco Tags  VB.NET  |  .NET 3.0  |  Windows 7  |  Visual Studio 2008

nossa Profilo | Newbie

Buogiorno a tutti, sto sviluppando una applicazione Windows Form con Visual Basic 2008;
tale applicazione deve leggere un file in formato XML ed estrarne i dati (per questo utilizzo Linq-to-XML), il mio problema è il seguente..

ammettendo di avere questo contenuto nel mio file XML
<?xml version="1.0" encoding="utf-8" ?> <Contatti> <Contatto Nome="Luciano" Citta="Padova"/> <Contatto Nome="Maurizio" Citta="Milano"/> <Contatto Nome="Renato" Citta="Varese"/> <Contatto Nome="Sergio" Citta="Vicenza"/> </Contatti>

Mostro una maschera nella quale compaiono 2 text-box una per il Nome(txt1) ed una per la Citta(txt2), sulla base di quanto inserito nelle textbox, devo generare una query per l'estrazione dei dati dal file, es:

Dim doc As XDocument = XDocument.Load("contatti.xml") ' caricamento del file if (txt1.text.trim.length > 0) Dim res = From persona In doc...<Contatti>.<Contatto> _ Select Nome = persona.@Nome, Città = persona.@Città _ Where persona.@Nome = txt1.text End If if (txt2.text.trim.length > 0) Dim res = From persona In doc...<Contatti>.<Contatto> _ Select Nome = persona.@Nome, Città = persona.@Città _ Where persona.@Citta= txt2.text End If if (txt1.text.trim.length > 0 && txt2.text.trim.length > 0 ) Dim res = From persona In doc...<Contatti>.<Contatto> _ Select Nome = persona.@Nome, Città = persona.@Città _ Where persona.@Nome = txt1.text _ And persona.@Citta= txt2.text End If

questo approccio è però scorretto in quanto dovrei controllare ogni singola casistica delle textbox presenti e se dovessi averne un numero elevato, dovrei scrivere centinaia di If .... End If

come potrei risolvere questo problema e generare una query in modo dinamico?

Graize,
Matteo

Jeremy Profilo | Guru

Ciao Matteo.
Vediamo se ho capito il problema....
For Each cnt As Control In Me.Controls If TypeOf cnt Is TextBox Then Dim txt As TextBox = CType(cnt, TextBox) If (txt.Text.Trim.Length > 0) Then Dim res = From persona In doc...<Contatti>.<Contatto> _ Select Nome = persona.@Nome, Città = persona.@Città _ Where persona.@Nome = txt.Text End If End If Next

facci sapere...
Ciao

nossa Profilo | Newbie

Ciao e grazie per la risposta, appena torno a casa stasera provo la tua soluzione, tuttavia, leggendo il tuoi codice, mi sorge un dubbio:

la Where Condition della query è sempre sul campo persona.@Nome io invece dovrei controllare il nome nel caso venga valorizzata la textbox del nome, mentre dovrei controllare la città nel caso venisse valorizzata la textbox della città;

se vengono valorizzate entrambe devo controllare sia persona.@Nome che persona.@Citta

se non viene valorizzato niente non devo avere nessuna Where nella mia query..

Grazie,
Matteo


Edit : ho provato il codice suggerito ma non funziona
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5