2016-03-24 13 views
0

SSIS için yeni ve ilginç bir sorunla karşı karşıyayım. Bir nesneyi bir değişkene geçiriyorum ve bu nesne ile bir foreach konteynerini besliyorum çünkü dosyalar için çeşitli dosya yollarını tutuyor.Nesne Değişkenini Liste'den Foreach Loop hatasına geçirme

FileInfo[] excelFiles = di.GetFiles("*.xlsx"); 
     ExcelModel model = new ExcelModel(); 
     if (excelFiles.Length > 0) 
     { 
      foreach(var item in excelFiles) 
      { 
       //recent edit 
       model = new ExcelModel(); 
       model.ExcelFilePath = item.FullName; 
       list.Add(model); 
      } 

     } 
     Dts.Variables["ExcelFilesList"].Value = list; 

ExcelModel olduğunu ...

class ExcelModel 
    { 
     public string ExcelFilePath { get; set; } 
    } 

aşağıdaki hatayı alıyorum: Hata: Değişken "Kullanıcı :: ExcelFilePath" için ForEach Değişken harita 1 numaralı uygulanamaz Bu benim C# kodu .

Herhangi bir yardım, bir süredir sıkışmış olduğum harika olurdu.

DÜZENLEME: Değişken Mapping in foreachta ben indeksi 0

+0

Eğer out kullanarak karşı dosyaların bu listeyi oluşturmak için bir komut dosyası görevi kullanan bir nedeni var mı:

FileInfo[] excelFiles = di.GetFiles("*.xlsx"); if (excelFiles.Length > 0) { Dts.Variables["ExcelFilesList"].Value = excelFiles.Select(file => file.FullName).ToList(); } 
billinkc

cevap

2

Sadece da düzenlenerek ve listeye ekliyoruz eşleştirilmiş bir ExcelFilePath dize var. Her seferinde yeni bir nesne oluşturmanız gerekir.

FileInfo[] excelFiles = di.GetFiles("*.xlsx"); 
     ExcelModel model = new ExcelModel(); 
     if (excelFiles.Length > 0) 
     { 
      foreach(var item in excelFiles) 
      { 
       model = new ExcelModel(); 
       model.ExcelFilePath = item.FullName; 
       list.Add(model); 
      } 

     } 
     Dts.Variables["ExcelFilesList"].Value = list; 

Veya:

FileInfo[] excelFiles = di.GetFiles("*.xlsx"); 
     if (excelFiles.Length > 0) 
     { 
      foreach(var item in excelFiles) 
       list.Add(new ExcelModel(){ExcelFilePath = item.FullName}); 
     } 
     Dts.Variables["ExcelFilesList"].Value = list; 

Veya:

FileInfo[] excelFiles = di.GetFiles("*.xlsx"); 
      if (excelFiles.Length > 0) 
        list.AddRange(excelFiles.Select(e=> item ExcelModel{ExcelFilePath = item.FullName})); 
      Dts.Variables["ExcelFilesList"].Value = list; 
+0

Merhaba Ashkan, Daha önce bu yöntemi denedim ve tam olarak kod denedim ama aynı hatayı alıyorum. teşekkürler –

+0

Gönderdiğiniz daha yeni yöntemi denedim ve başarısız, aynı hata. –

+0

'list' içinde' list' türü nedir? (Yeni ExcelModel() {ExcelFilePath = item.FullName}); 'onun bildirimi hakkında bir şey olmalı –

0

konu yerine gerçekten Linq kullanmalısınız, değişkenin konumu nedeniyle - bu dramatik sizin için bu kolaylaştırır . Gerçekten de sadece bir List<string>'a gereksinim duyduğuna dair kendi sorununun cevabına bağlı olarak, işte bunun için Linq.

 List<string> newList = new List<string>(); 
     FileInfo[] excelFiles = di.GetFiles("*.xlsx"); 
     if (excelFiles.Length > 0) 
     { 
      foreach (var item in excelFiles) 
      { 
       newList.Add(item.FullName); 
      } 
     } 
     Dts.Variables["ExcelFilesList"].Value = newList; 
+0

Bu BBIS2008'dir, burada Linq referansını almakta sorun yaşıyorum = /. –

0

Sorunu düşündüm bazı Dabbling sonra ... Bu benim kod değiştirildi kutusunun Foreach (dosya) Enumerator?