我是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中,我有一个映射到索引0的ExcelFilePath字符串
答案 0 :(得分:2)
您只是编辑同一个对象并将其添加到列表中。 你应该每次创建一个新对象。
s = 'I am having a very nice day.'
split = s.split()
print(split)
length = len(split)
index = length - 1
while (index >= 0):
split[index] = index;
index = index - 1;
print(split)
或者:
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;
答案 1 :(得分:0)
问题是由于变量的位置,而你应该真正使用=First(Fields!AnimalName.Value, "AnimalNameDataSet")
- 它会大大简化这一点。看起来,根据您自己的问题的答案,您确实需要Linq
,这里的List<string>
就是这样。
Linq
答案 2 :(得分: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;