2009-09-04 25 views
14

Qual è il modo più efficiente di convertire una query di sola riga su una stringa?Converti query in linq su array di stringhe - C#

private string[] WordList() 
    { 
     DataContext db = new DataContext(); 

     var list = from x in db.Words 
        orderby x.Word ascending 
        select new { x.Word }; 

     // return string array here 
    } 

Nota - x.Word è una stringa

risposta

30

io preferisco lo stile lambda, e si dovrebbe davvero essere smaltire il vostro contesto dati.

private string[] WordList() 
{ 
    using (DataContext db = new DataContext()) 
    { 
     return db.Words.Select(x => x.Word).OrderBy(x => x).ToArray(); 
    } 
} 
+2

Mi piace dare un allenamento al gc! - Sto scherzando - questo è un ottimo punto. Grazie. –

+0

Impressionante soluzione! –

4

se si digita nella sintassi lambda invece si può fare un po 'più facile con il metodo ToArray:

string[] list = db.Words.OrderBy(w=> w.Word).Select(w => w.Word).ToArray(); 

o ancora più breve:

return db.Words.OrderBy(w => w.Word).Select(w => w.Word).ToArray(); 
+0

sia dare errore - Impossibile convertire implicitamente il tipo 'Word []' a 'string []' –

+0

corresse, mancato il .word bit – Robban

7

ne dite:

return list.ToArray(); 

Si presume che x.Word sia effettivamente una stringa.

In caso contrario si potrebbe provare:

return list.Select(x => x.ToString()).ToArray(); 
+0

Il primo modo dà questo errore - Impossibile convertire implicitamente il tipo 'AnonymousType # 1 []' accordare[]'. Il secondo metodo funziona! Grazie! –

+0

Salta la nuova {} nella tua selezione e non dovrai decomprimere il tipo anonimo, avrai solo una stringa (supponendo che Word sia una colonna di caratteri). – tvanfosson

+0

@tvanfosson, cosa significa "* scompattare un tipo anonimo *"? (Suppongo che sia stata apportata una modifica a questa risposta, perché non vedo più alcun 'nuovo {}'.) – kdbanman