2009-09-04 8 views
14

¿Cuál es la forma más eficiente de convertir una consulta de linq de una sola columna a una matriz de cadenas?Convertir la consulta de linq a la matriz de cadenas - 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 es una cadena

Respuesta

30

prefiero el estilo lambda, y que realmente debería ser la eliminación de su contexto de datos.

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

¡Me gusta dar entrenamiento al gc! - Es una broma, este es un muy buen punto. Gracias. –

+0

¡Solución impresionante! –

4

si escribe en la sintaxis lambda lugar que puede hacer que sea un poco más fácil con el método ToArray:

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

o incluso más corto:

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

tanto dará error - No se puede convertir implícitamente el tipo 'Palabra []' a 'string []' –

+0

corregido, se perdió el .Word mordió – Robban

7

¿Qué tal:

return list.ToArray(); 

Esto supone que x.Word es realmente una cadena.

De lo contrario, podría intentar:

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

La primera forma da este error - No se puede convertir implícitamente el tipo 'AnonymousType # 1 []' Encadenar[]'. ¡El segundo método funciona! ¡Gracias! –

+0

Omita el nuevo {} en su selección y no tendrá que descomprimir el tipo anónimo, solo tendrá una cadena (suponiendo que Word es una columna de caracteres). – tvanfosson

+0

@tvanfosson, ¿Qué significa "* descomprimir un tipo anónimo *"? (Supongo que se ha realizado una modificación en esta respuesta, porque ya no veo ningún 'nuevo {}'.) – kdbanman

Cuestiones relacionadas