Ciao a tutti,
Sono nuovo del forum, sto facendo il mio primo programma che utilizza il LINQ, il mio problema e' questo: devo ricavare il primo valore minore a quello di riferimento tra quelli contenuti in una lista.
Ho cominciato a scriver il codice, ma m sono bloccato a causa di 2 errori che non riesco a risolvere.
var casse = (from serbatoio in xmlDoc.Descendants("serbatoio")
where serbatoio.Attribute("id").Value == ("serbatoio" + NumSerbatoio.Text)
select serbatoio).FirstOrDefault().Descendants("valore")
.Select(v => new { Altezza = int.Parse(v.Attribute("Altezza").Value), Litri = int.Parse(v.Attribute("litri").Value) }).ToList();
var prova = (from altezze in casse
orderby altezze.Altezza descending
select altezze).ToList();
int altezza1 = prova.FirstOrDefault(x => x > int.Parse(Altezza.Text));
// textBox1.Text = casse.ToString();
} visual studio mi restituisce questi errori nell ultima riga:
Errore 1 'System.Collections.Generic.List<AnonymousType#1>' non contiene una definizione per 'FirstOrDefault' e l'overload migliore del metodo di estensione 'System.Linq.ParallelEnumerable.FirstOrDefault(System.Linq.ParallelQuery, System.Func<TSource,bool>)' presenta alcuni argomenti non validi
Errore 2 Argomento dell'istanza: impossibile convertire da 'System.Collections.Generic.List<AnonymousType#1>' a 'System.Linq.ParallelQuery'
potere aiutarmi a risolvere il mio problema per favore?
Il compilatore ha ragione, x nell'ultima riga è una classe anonima con le proprietà Altezza e Litri, devi esplicitare quale proprietà vuoi confrontare, ad ogni modo crea una classe "normale" e usa quella che rendi più leggibile il codice
Per ricavare l'altezza più grande sotto alla soglia ti conviene utilizzare ancora LINQ per una maggiore leggibilità:
int altezza1 = (from p in casse
where p.Altezza < int.Parse(Altezza.Text)
orderby p.Altezza descending
select p.Altezza).FirstOrDefault();
la query associata alla variabile "prova" del codice che avevi postato a questo punto non ti serve e la puoi cancellare
Trovo il codice più pulito con una classe non anonima
Ciao
PS: Nel codice di prima togli da "NumSerbatoio.Text" le virgolette naturalmente
Ciao, grazie del consiglio appena torno a casa lo provo... si so cosa e' una classe, ma non riuscivo a capire cosa volevi dirmi :*
Ti aggiorno sui miei progressi...a dopo