Передача переменной объекта из списка в ошибку цикла по каждому элементу
Я новичок в SSIS и сталкиваюсь с интересной проблемой. Я передаю список в переменную объекта и передаю контейнеру foreach этот объект, поскольку он содержит несколько путей к файлам. Это мой код C#:
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; }
}
Я получаю следующую ошибку: Ошибка: Невозможно применить сопоставление переменной ForEach номер 1 с переменной "User::ExcelFilePath".
Любая помощь была бы фантастической, я застрял на некоторое время.
РЕДАКТИРОВАТЬ: В Foreach в сопоставлении переменных у меня есть строка ExcelFilePath, которая сопоставлена с индексом 0
3 ответа
Вы просто редактируете тот же объект и добавляете его в список. Вы должны создавать новый объект каждый раз.
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;
Проблема связана с расположением переменной, вместо этого вы должны действительно использовать Linq
- это значительно упрощает это для вас. Судя по ответу на свой вопрос, кажется, что вам действительно нужно List<string>
, здесь Linq
для этого.
FileInfo[] excelFiles = di.GetFiles("*.xlsx");
if (excelFiles.Length > 0)
{
Dts.Variables["ExcelFilesList"].Value =
excelFiles.Select(file => file.FullName).ToList();
}
После недолгого размышления я понял проблему... Я изменил свой код так:
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;