C# 从值集合添加DataRow项

C# 从值集合添加DataRow项,c#,collections,datatable,datarow,C#,Collections,Datatable,Datarow,我试图创建一个DataRow,它从硬编码字符串或字符串变量中获取一些值,其余的值则从集合的值中获取,具体来说,System.Collections.Generic.Dictionary.ValueCollection。在我下面的尝试中,我正在对一个数组进行强制转换,但这不起作用 DataTable source = new DataTable(); foreach (string sample in GridSource.SampleName) { SampleDictionaries

我试图创建一个DataRow,它从硬编码字符串或字符串变量中获取一些值,其余的值则从集合的值中获取,具体来说,
System.Collections.Generic.Dictionary.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“用这个集合填充剩余的列值”,或者我必须想出一些循环来完成它

在KMoussa的帮助下找到了答案

source.Rows.Add(new object[] { "", "Std. Deviation"}.Concat(sd.StdDev.Values.Cast<object>().ToArray()).ToArray());
source.Rows.Add(新对象[]{“,”标准偏差“}.Concat(sd.StdDev.Values.Cast().ToArray()).ToArray());

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

您可以通过datatable.NewRow()方法创建行。然后可以使行的items数组等于数据数组:

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

我认为
.Add(新对象[]{sample,“Average”}.Concat(sd.Avg.Values.Cast().ToArray());
应该可以工作,您可能不需要
Castsure@KMoussa啊,伙计,看起来代码不错,但不是很好。我打赌这已经接近我需要的了。我会继续修补它,看看我能做些什么。