2017-06-07 8 views
0

linqを使用して、csvファイルをspeicifcの場所にダウンロードさせます。csvhelperを使用して特定の場所にファイルをダウンロードする

私はインターネットから何かを学び、csvhelperを学びます。 私は以下のように動作し、特定の場所(D:\ export.csv)にダウンロードするものを書きます。

public ActionResult YRecordReport() 
    { 
     using (var sw = new StreamWriter(@"d:\export.csv", true, Encoding.GetEncoding("big5"))) 
     using (var writer = new CsvWriter(sw)) 
     { 
      var abc = from t in db.TRecordDBSet 
         join s in db.SInfoDBSet on t.SId equals s.SId 
         orderby s.sId, t.StartToEndDate 
         select new TRecord() 
         { 
          StaffId = t.SId, 
          Date = t.StartToEndDate, 
          Name = s.Cname, 
          CourseName = t.Tname, 
          Organizer = t.Organizer, 
          Hour = t.Hour, 
          Score = t.Score 
         }; 

      var source = abc.ToList(); 

      var config = new MapperConfiguration(cfg => 
      { 
       cfg.CreateMap<TRecord, TRecord_Data>(); 
      }); 

      config.AssertConfigurationIsValid(); 
      Mapper.Initialize(cfg => cfg.CreateMap<TRecord, TRecord_Data>()); 
      writer.Configuration.Encoding = Encoding.GetEncoding("big5"); 

      var mapper = config.CreateMapper(); 

      List<TRecord_Data> records = Mapper.Map<List<TRecord>, List<TRecord_Data>>(source); 

      foreach (var item in records) 
      { 
       writer.WriteRecord(item); 
      } 
     } 
} 

私は彼らの特定の場所にファイルをダウンロードするには、ユーザーを聞かせしたいので、私は以下のようにコードを変更し、それがOKで実行され、たExport.csvファイルが空です。私は何も書いていないのですか?ユーザーがファイル名をダウンロードして使用できるようにするにはどうすればよいですか?

[MyAuthFilter(Auth = "Admin")] 
    public ActionResult YearTrainingRecordReport() 
    { 
     var memoryStream = new MemoryStream(); 
     var stream = new StreamWriter(memoryStream); 
     var writer = new CsvWriter(stream); 

     var abc = from t in db.TRecordDBSet 
         join s in db.SInfoDBSet on t.SId equals s.SId 
         orderby s.SId, t.StartToEndDate 
         select new TRecord() 
         { 
          Sd = t.SId, 
          Date = t.StartToEndDate, 
          Name = s.Cname, 
          CourseName = t.Tname, 
          Organizer = t.Organizer, 
          Hour = t.Hour, 
          Score = t.Score 
         }; 

      var source = abc.ToList(); 

      var config = new MapperConfiguration(cfg => 
      { 
       cfg.CreateMap<TRecord, TRecord_Data>(); 
      }); 

      config.AssertConfigurationIsValid(); 
      Mapper.Initialize(cfg => cfg.CreateMap<TRecord, TRecord_Data>()); 
      writer.Configuration.Encoding = Encoding.GetEncoding("big5"); 

      var mapper = config.CreateMapper(); 

      List<TRecord_Data> records = Mapper.Map<List<TRecord>, List<TRecord_Data>>(source); 

      foreach (var item in records) 
      { 
       writer.WriteRecord(item); 
      } 

      return File(memoryStream, "text/csv", "export.csv"); 

} 

答えて

0

ライターをフラッシュしてストリームをリセットする必要があります。

writer.Flush(); 
stream.Position = 0; 

あなたがCsvHelper 3.0以降(現在はプレリリース中)を使用している場合、あなたはまた、新しいレコードを強制する必要があります。

writer.NextRecord(); 
関連する問題