2012-02-16 23 views
5

Tengo una clase en linq que consulta la tabla db como esta, y la pregunta es: ¿Cómo exporto esos datos a csv? He intentado con el enlace sugerido y estoy usando linq2csv y todavía quiero saber cómo obtener la columna por orden. ¡Gracias!Exportar a csv - consulta Linq

var usr = from usr in db.User 
select new { usr.UserName, usr.Dept, usr.Name) 
MainListView.DataSource = usr; 
MainListView.DataBind(); 

CsvFileDescription outputFileDescription = new CsvFileDescription 
       { 
        SeparatorChar = ',', 
        FirstLineHasColumnNames = true, 
        FileCultureName = "en-US" 
       }; 

       CsvContext cc = new CsvContext(); 
       string finalPath = mypath + "usr_" + DateTime.Now.ToString ("yyyyMMddhhmmssfff") + ".csv"; 
       cc.Write(usr, finalPath, outputFileDescription); 

Respuesta

2

Con el fin de controlar el orden de clasificación se debe definir una clase con atributos como

public class User 
{ 
    [CsvColumn(FieldIndex = 1)] 
    public string UserName { get; set; } 

    [CsvColumn(FieldIndex = 2)] 
    public string Dept { get; set; } 

    [CsvColumn(FieldIndex = 3)] 
    public string Name { get; set; } 
} 

A continuación, cambiar la consulta LINQ a utilizar esta clase, por ejemplo

string mypath = @".\"; 

var usr = (from u in db.User select new User 
       { 
        UserName = u.UserName, 
        Dept  = u.Dept , 
        Name  = u.Name 
       } 
     ); 

CsvFileDescription outputFileDescription = new CsvFileDescription 
    { 
     SeparatorChar = ',', 
     FirstLineHasColumnNames = true, 
     FileCultureName = "en-US" 
    }; 

CsvContext cc = new CsvContext(); 
string finalPath = mypath + "usr_" + DateTime.Now.ToString("yyyyMMddhhmmssfff") + ".csv"; 
cc.Write(usr, finalPath, outputFileDescription); 
+0

Lo intenté, pero tengo un campo de fecha y hora que no lo aceptará. Lo tengo en la clase definida como dateTime y en sql también es la fecha y la hora. Algunas ideas. Saludos cordiales – FAA

+0

Si la columna sql permite nulos, entonces es posible que necesite usar DateTime? en lugar de DateTime. Si eso no ayuda, ¿qué error obtienes? – sgmoore

+0

es fecha y hora en ambos. También el error es: DateTaken = u.DateTaken <--- connot implicity convert from datetime to datetime. gracias – FAA

1

Puesto que ya está familiarizado con LINQ, he utilizado LINQ2CSV de Matt Perdeck (http://www.codeproject.com/Articles/25133/LINQ-to-CSV-library) antes y que está hecho mi vida mucho más fácil.

+0

Estoy buscando un botón en el que el usuario presione y luego solicite guardar el archivo en su computadora. También hay una manera más fácil de hacer esto. gracias – FAA

+0

¡Cualquier otro comentario! – FAA

+0

He usado ese Linq2csv y lo he usado de esta manera (como se actualiza en la primera publicación). Pero obtengo el resultado en csv, pero el orden de las columnas es aleatorio. alguna idea de cómo solucionar esto? – FAA

1

LINQtoCSV no conserva el orden de su columna a menos que use el atributo [CsvColumn (FieldIndex = 1)] en todas sus propiedades. ¿Pero quién quiere hacer eso? Usaría la biblioteca ServiceStack.Text. Conserva los pedidos de columnas de forma predeterminada. Funciona de la siguiente manera:

cadena csv = ServiceStack.Text.CsvSerializer.SerializeToCsv <> (exportData);