1

CSV ファイルをインポートする必要があります。行の順序はデータにとって重要であるため、インポート (インデックス) の一部として必要です。私が今していること(回避策)は次のとおりです。

        string[] allLines = File.ReadAllLines(soureFilePath, Encoding.Default);    
        //Add Line-Index
        for (int i = 0; i < allLines.Length; i++)
        {
            allLines[i] = i + ";" + allLines[i];
        }

        _sourceList = (from line in allLines.Skip(1)
                       let data = line.Split(new[] {';'}, StringSplitOptions.None)
                       select
                           new MappingSource
                               {
                                   Index = Convert.ToInt32(data[0]),
                                   TargetEntity = data[1].Trim(),
                                   TargetFolder = data[2].Trim(),
                                   TargetLevel = data[3].Replace(',', '.').Trim(),
                                   FolderDefinition = data[4].Trim(),
                                   Type = data[5].Trim(),
                                   SourceFolder = data[6].Trim(),
                                   SourceLevel = data[7].Replace(',', '.').Trim(),
                                   BucketStructure = data[8].Trim()
                               }).ToList();

これはあまりエレガントではないと思います。Linq-Statement でインデックスを正しく取得する方法はありますか?

ありがとう

4

2 に答える 2

1

これは配列なので、これは実際に機能します。ただし、基本的な実装を切り替えることはできません (つまり、お勧めしません)。

var i = 0;
_sourceList = (from line in allLines.Skip(1)
                   let data = line.Split(new[] {';'}, StringSplitOptions.None)
                   select
                       new MappingSource
                           {
                               Index = i++,
                               TargetEntity = data[0].Trim(),
                               TargetFolder = data[1].Trim(),
                               TargetLevel = data[2].Replace(',', '.').Trim(),
                               FolderDefinition = data[3].Trim(),
                               Type = data[4].Trim(),
                               SourceFolder = data[5].Trim(),
                               SourceLevel = data[6].Replace(',', '.').Trim(),
                               BucketStructure = data[7].Trim()
                           }).ToList();

別の方法は、要素とインデックスを与える 2 番目の IEnumerable.Select() を使用することですが、LINQ クエリ形式では使用できません。

于 2013-07-25T12:36:33.193 に答える