簡體   English   中英

如何在C#LINQ的SELECT中將字符串轉換為C#代碼

[英]How to convert a string to C# code in the SELECT of C# LINQ

我正在嘗試通過LINQ重新排列/重新排列csv文件。 計算完列的排列后,需要在該排列中創建一個新的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)中列號非常安靜,並且以動態方式接收位置排列(positionArray []),因此在字符串中生成了SELECT部分​​之后的列排列。 “計數”是此處的列數。

        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;
        }

我無法在SELECT部分​​使用'selectCol',因為它正在使用x [someNumber]生成文件。

如何轉換'selectCol'字符串,以便它給我想要的結果?

除此之外,還有其他選擇嗎?

我希望我能正確理解問題。 但是,這是實現您想要的目標的另一種方式。

//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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM