从值集合中添加 DataRow 项

Adding DataRow items from collection of values

我正在尝试创建一个 DataRow,它从硬编码字符串或字符串变量中获取一些值,并从集合的值中获取其余值,具体来说 System.Collections.Generic.Dictionary<string, double>.ValueCollection。在我下面的尝试中,我正在转换为一个数组,但这不起作用。

DataTable source = new DataTable();

foreach (string sample in GridSource.SampleName)
{
    SampleDictionaries sd = GridSource.Data.Where(x => GridSource.Data.IndexOf(x) == GridSource.SampleName.IndexOf(sample)).First();
    source.Rows.Add(sample, "Average", sd.Avg.Values.ToArray());
    source.Rows.Add("", "Std. Deviation", sd.StdDev.Values.ToArray());
}

上面的代码产生了这个:

我明白这里发生了什么。我的问题是:是否有一种简单的方法来告诉 DataRow "Fill the remaining column values with this collection," 或者我是否必须想出一些循环来做到这一点?

在 KMoussa 的帮助下找到了答案!

source.Rows.Add(new object[] { "", "Std. Deviation"}.Concat(sd.StdDev.Values.Cast<object>().ToArray()).ToArray());

与他推荐的非常相似,但最后缺少对数组的第二次强制转换。

您可以做的是从 datatable.NewRow() 方法创建行。然后你可以让行的项目数组等于数据数组:

DataTable source = new DataTable();

foreach (string sample in GridSource.SampleName)
{
    DataRow temp = source.NewRow();
    SampleDictionaries sd = GridSource.Data.Where(x => GridSource.Data.IndexOf(x) == GridSource.SampleName.IndexOf(sample)).First();
    temp.ItemArray = new object[]{sample, "Average"}.Concat(sd.Avg.Values.ToArray());
    source.Rows.Add(temp);
    temp = source.NewRow();
    temp.ItemArray = new object[]{"", "Std. Deviation".Concat(sd.StdDev.Values.ToArray());
}