如何在不再次枚举查询结果的情况下将DataGrid数据保存到CSV文件?

How to save DataGrid data to CSV file without enumerating the query result again?

我正在使用此命令从我的查询中获取数据:

private void loadData()
    {
        numRows = 0;

        try
        {
            data = gpso.gpEntitiesObject.ExecuteStoreQuery<My_Class>(sql);

            dataGrid.ItemsSource = data;
            dataGrid.IsReadOnly = true;
            numRows = dataGrid.Items.Count;
            numRowsTB.Text = "Number of rows: " + numRows;

        }
        catch (Exception ex)
        {
            statusBarTB.Text = "exception: " + ex.Message;
        }
    }

虽然这有效并且我在我的 DataGrid 中看到了数据,但我无法将数据保存到 CSV 文件,因为我试图再次重新枚举查询结果,这是不允许的。

获取数据并将其保存为 CSV 的正确方法是什么? 我应该使用 DataGrid API 滚动浏览行并在 foreach() 循环中获取数据吗?

这是我的 CSV 函数:

    public static string exportToCSV(IEnumerable<My_Class> data, string separator)
    {
        string ishod = "";
        string csvRed = "";

        ishod += "Key1" + separator + "Key2" + separator;
        ishod += "Key3" + separator + "Key4" + separator;

        ishod += "\n";

        foreach (My_Class item in data)
        {
            csvRed += item.Key1+ separator + item.Key2+ separator;
            csvRed += item.Key3+ separator + item.Key4+ separator;

            csvRed += "\n";

            ishod += csvRed;

            csvRed = "";
        }

        return ishod;
    } 

我听从了@Clemens 的建议。我用了

IEnumerable dataList = data.ToList<My_Class>(); 
dataGrid.ItemSource = dataList;

然后我打电话给

exportToCSV(dataList, "\t");

使用 dataList 作为参数并且成功了!