2013-05-11 5 views
1

Хороший день для всех .. Я очень новичок в программировании ASP.net, поэтому прошу прощения за образец кода. У меня есть контроллер, который имеет этот код действия. Я хотел бы поместить данные из таблицы Employee в CSV-файл. Я не очень хорошо разбираюсь в запросе linq, поэтому я не знаю, как получить его по строке. im с использованием MVC4.Экспорт данных в CSV MVC4

public FileContentResult DownloadCSV() 
    { 

     //This is my linq query 
     var EmployeeQry = from data in db.Employees 
          select data; 

     //I want to put my Employee data into a CSV. something like this.. 
     string csv = "EmployeeName,EmployeePostion,EmployeeDepartment"; 
     return File(new System.Text.UTF8Encoding().GetBytes(csv),"text/csv","Report.csv"); 

    } 
+0

Take посмотрите на эту библиотеку: https://github.com/JoshClose/CsvHelper - делает ее очень простой. – KorsG

ответ

1

Попробуйте это:

string csv = string.Concat(
      EmployeeQry.Select(
        employee => string.Format("{0},{1},{2}\n", employee.Name, employee.Position, employee.Department))); 

или это (то же самое с альтернативным синтаксисом):

string csv = string.Concat(from employee in EmployeeQry 
           select string.Format("{0},{1},{2}\n", employee.Name, employee.Position, employee.Department)); 
1

Благодаря Matis .. но String.Format не работает в LINQ. Поэтому я сделал запрос в базе данных и форматировал локально.

public FileContentResult DownloadCSV() 
{ 
    string csv = string.Concat(from employee in db.Employees 
           select employee.EmployeeCode + "," 
           + employee.EmployeeName + "," 
           + employee.Department + "," 
           + employee.Supervisor + "\n"); 
    return File(new System.Text.UTF8Encoding().GetBytes(csv), "text/csv", "Report.csv"); 
} 
5

Это работало лакомство для меня (Будет необходимо адаптировать к конкретным потребностям)

Поместите это в контроллер с именем DownloadController

public void ExportToCSV() 
     { 
      StringWriter sw = new StringWriter(); 

      sw.WriteLine("\"First Name\",\"Last Name\",\"Email\",\"Organisation\",\"Department\",\"Job Title\""); 

      Response.ClearContent(); 
      Response.AddHeader("content-disposition", "attachment;filename=registereduser.csv"); 
      Response.ContentType = "application/octet-stream"; 

      ApplicationDbContext db = new ApplicationDbContext(); 

      var users = db.Users.ToList(); 

      foreach (var user in users) 
      { 
       sw.WriteLine(string.Format("\"{0}\",\"{1}\",\"{2}\",\"{3}\",\"{4}\",\"{5}\"", 

       user.FirstName, 
       user.LastName, 
       user.Email, 
       user.Organisation, 
       user.Department, 
       user.JobTitle 
       )); 
      } 
      Response.Write(sw.ToString()); 
      Response.End(); 

     } 

& вызов с использованием

<a href="@Url.Action("ExportToCSV", "Download")">download the CSV of registered users</a> 
Смежные вопросы