将datatable转换为IEnumerable <t>以传递给Result <t>(IEnumerable <t>数据); </t> </t> </t>

时间:2011-05-09 23:11:11

标签: c# asp.net vb.net generics datatable

我有一个名为Result<T>的对象,它有一个接受IEnumerable<T>参数的构造函数。如果可能的话,我希望能够传入数据表。

我尝试了datatable.AsEnumerable(),但在我绑定数据时,它抱怨'MyProperty'不是'DataRow'类型的字段或属性 - 这是有道理的,因为'MyProperty'不是属性'DataRow',但它是我数据表中的一列。

有没有办法将数据表转换为可以传递给Result对象的东西,并且仍然将它绑定到gridview?

4 个答案:

答案 0 :(得分:3)

如果您可以编写一个可以使用单个DataRow构造具有“MyProperty”的对象实例的函数,那么您可以这样做:

datatable.AsEnumerable().Select(MyConversionFunction);

答案 1 :(得分:1)

我最终使用Linq将数据表转换为匿名对象数组。

Dim objs = From row In dt Select New With {
    .Id = row.Field(Of Integer)("Id"),
    .Count = row.Field(Of Integer)("Count")
}

然后我创建了一个泛型函数来使用类型推断来将匿名对象数组导入到Result对象的构造函数中

Private Function GetResult(Of T)(ByVal data As IEnumerable(Of T)) As Result(Of T)
    Return New Result(Of T)(Nothing, data)
End Function

使用Dim result = GetResult(objs)

进行了调用

答案 2 :(得分:0)

怎么样

table.Rows.Cast<DataRow>()

答案 3 :(得分:0)

如果要将输入的数据表转换为EnumerableRowCollection,可以使用以下命令:

EnumerableRowCollection<YourTypedRow> typedRowCollection = datatable.AsEnumerable().Cast<YourTypedRow>();