Как преобразовать строку в код C# в SELECT из C# LINQ

Я пытаюсь переупорядочить / переупорядочить CSV-файл через LINQ. После того, как я рассчитал расположение столбцов, мне нужно создать новый CSV-файл в этом расположении.

Ссылка: https://msdn.microsoft.com/en-us/library/bb546155.aspx

Я использую аналогичный код для записи нового файла (в данном случае: 3 столбца):

IEnumerable<string> queryLINQ =
                from line in lines
                let x = line.Split(',')
                select x[3],x[1],x[2];

Но в задаче (80) столбцы no.of довольно громадны, и расположение принимается динамически (positionArray[]), поэтому расположение столбцов после части SELECT генерируется в строке. 'count' - это номер колонки здесь.

        string selectCol = "";
        for (int k = 0; k < count; k++)
        {
            string col;
            if(k+1<count)
            {
                col= "x[" + positionArray[k] + "],";
            }
            else
            {
                col= "x[" + positionArray[k] + "]";
            }
            selectCol += piece;
        }

Я не могу использовать 'selectCol ' в части SELECT, поскольку он генерирует файл с помощью x[someNumber].

Как мне преобразовать строку 'selectCol ', чтобы она дала мне желаемый результат?

Есть ли другая альтернатива этому?

2 ответа

Я надеюсь, что я правильно понимаю проблему. Но вот другой способ достижения того, что вы хотите.

//assuming this is the new order of columns you want
  int[] positionArray = {2, 1, 0};
  string[] lines = System.IO.File.ReadAllLines(@"c:\temp\testcsv.csv");

  var newLines = lines.Select(p =>
  {
    var columns = p.Split(',');
    var sb = new StringBuilder();
    foreach (var i in positionArray)
    {
      if (sb.Length > 0)
      {
        sb.Append(",");
      }
      sb.Append(columns[i]);
    }
    return sb.ToString();
  }).ToArray();

  System.IO.File.WriteAllLines(@"c:\temp\testcsv2.csv", newLines);
  Console.WriteLine("Spreadsheet2.csv written to disk. Press any key to exit");
  Console.ReadKey(); 

С уважением к @Captain0 (другой ответ) я получил Linq подход для вас.

Укажите порядок столбцов в positionArray и вы получите заказ желания.

int[] positionArray = { 2, 1, 0 };

var flines = File.ReadAllLines(@"c:\temp\testcsv.csv");

var arranged = flines.Select(line => line.Split(','))
                     .Select(x => string.Join(",", x.Select((s, i) => x[positionArray[i]])))
                     .ToList();

И выстроенные строки вы можете записать в новый файл, используя File.WriteAllLines,

File.WriteAllLines(@"c:\temp\testcsv2.csv", arranged);
Другие вопросы по тегам