将对象变量从List传递到Foreach循环错误

时间:2016-03-24 15:23:49

标签: c# ssis

我是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字符串

3 个答案:

答案 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;