DataGridView AddRange,将 IEnumerable<object[]> 转换为 DataGridViewRow[](如果可能,使用 LINQ)

Ian*_*Ian 5 c# linq datagridview rows winforms

如果我们想向 a 添加一行DataGridView,除了添加一个DataGridViewRow对象之外,我们还可以通过传递一个对象数组 ( object[])来实现

dgv.Rows.Add(objArray); //objArray is of type object[]
Run Code Online (Sandbox Code Playgroud)

但是,如果我们想向 a 添加一定范围的行DataGridView,则不能通过IEnumerable<object[]>,而只能通过DataGridViewRow[]

dgv.Rows.AddRange(ienumObjArray); //not allowed, ienumObjArray is of type IEnumerable<object[]>
dgv.Rows.AddRange(dgvRows); //allowed, dgvRows is DataGridViewRow[]
Run Code Online (Sandbox Code Playgroud)

我的问题:是否有任何方法可以强制IEnumerable<object[]>转换DataGridViewRow[](如果可以使用 LINQ),以便我们可以执行类似的操作

dgv.Rows.AddRange(ienumObjArray.DoSomethingWithLinq(x => doSomething)); 
Run Code Online (Sandbox Code Playgroud)

并且不需要object[]一一添加?

foreach(object[] objArray in ienumObjArray)
    dgv.Rows.Add(objArray); //adding one by one, is it possible to get rid this of?
Run Code Online (Sandbox Code Playgroud)

编辑:

这是完成于WinForms

编辑2:

应用@abatishchev的建议(没有AddRange),我遇到了奇怪的结果。如果我输入:

ienumObjArray.Select(objArr => dgv.Rows.Add(objArr)); 
Run Code Online (Sandbox Code Playgroud)

或者

var result = ienumObjArray.Select(objArr => dgv.Rows.Add(objArr)); 
Run Code Online (Sandbox Code Playgroud)

然后,dgv没有添加行。

但如果我做了其中任何一个,

ienumObjArray.Select(objArr => dgv.Rows.Add(objArr)).ToArray();
ienumObjArray.Select(objArr => dgv.Rows.Add(objArr)).ToList();
ienumObjArray.Select(objArr => dgv.Rows.Add(objArr)).Count();

or 

var result = ienumObjArray.Select(objArr => dgv.Rows.Add(objArr))
foreach(int i in result){
    //do something
}
Run Code Online (Sandbox Code Playgroud)

然后就可以正常工作了!为什么会这样呢?

Rez*_*aei 3

作为一个选项,您可以添加一个AddRange扩展方法来DataGridViewRowCollection接受IEnumerable<object[]>参数:

public static class DataGridViewExtensions
{
    public static void AddRange(this DataGridViewRowCollection collection, IEnumerable<object[]> rows)
    {
        foreach (object[] item in rows)
        {
            collection.Add(item);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有关扩展方法的更多信息: