C# Framework 3.5 Linq convert System.Collections.Generic.List<AnonymousType#1> to System.Collections.Generic.List<string>

L’obiettivo è la costruzione di un metodo (sia esso public, protected o private)
che ci consenta di estrarre una lista di stringhe.

La signature del nostro metodo sarà:

1
public List<string> getMyString()

Nel caso specifico vogliamo estrarre un set di dati rappresentati
da una e sola colonna di una tabella del nostro database.
Istintivamente, ci verrebbe da scrivere un pezzo di codice del tipo:

1
2
3
var q = from t in context.myentity
select new { Codice = t.mycodice };
List<string> listaCodici = q1.ToList();

Ovviamente è errato, sintatticamente e semanticamente.
Non è corretto supporre che, essendo il campo mycodice, un campo varchar, esso venga poi rimappato in un insieme di stringhe. Il compilatore, quindi, tornerà il seguente errore:

Cannot implicitly convert type
‘System.Collections.Generic.List<anonymoustype #1>’ to ‘System.Collections.Generic.List<string>’

Esistono due diverse strade per ottemperare al nostro obiettivo.
La prima è quella di definire una struct o una classe customizzata che contenga al suo interno la property, stringa, che andremo poi a valorizzare estraendo i dati dal database tramite LINQ.

La seconda è quella di scrivere un pezzo di codice come:

1
2
3
4
5
var q = from t in context.myentity
let codici = new { t.mycodice }
select codici;
List<string> listaCodici = (from c in q
select c.mycodice).ToList();

Related Posts: