2016-03-24 21 views
0

私はSSISを初めて使用していて興味深い問題に直面しています。オブジェクトの変数にリストを渡して、ファイルのいくつかのファイルパスを保持しているので、foreachコンテナにこのオブジェクトを渡しています。これは私のC#のコードです:適用できない変数 "ユーザー:: ExcelFilePath" へのForEach変数マッピング番号1:エラー:オブジェクト変数をリストからForeachループに渡すエラー

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は、私は次のエラーを取得しています...

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

です。

私はしばらくの間立ち往生しています。

EDIT:foreachの中の変数のマッピングでは、私はあなたがちょうど同じオブジェクトを編集し、リストに追加されているインデックス0

+0

アウトを使用して対のファイルのリストを生成するスクリプトタスクを使用している理由がありますボックスのForeach(ファイル)列挙子? – billinkc

答えて

2

にマッピングされているExcelFilePath文字列を持っています。 毎回新しいオブジェクトを作成する必要があります。

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; 

または:

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; 

または:

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

Ashkanこんにちは、私はこの方法を先に試して、あなたの正確なコードを試しましたが、同じエラーが発生しています。ありがとうございました –

+0

あなたが投稿した最新のメソッドを試してみましたが、同じエラーが発生しました。 –

+0

'list.Add(' new ExcelModel(){ExcelFilePath = item.FullName})の 'list'の型は何ですか?その宣言に関するものでなければなりません –

0

問題ではなく、あなたが本当にLinqを使用する必要があり、変数の場所によるものである - それは劇的にあなたのためにこれを簡素化。まるであなた自身の質問に対する答えに基づいて、ちょうどList<string>が必要だったかのように、それはLinqです。

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

これはBBIS2008ですが、ここでLinqの参照を取得するのに問題があります。 –

0

は、私はこの問題を考え出したいくつかの手を染めた後...私はこれに私のコードを変更:

 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; 
関連する問題