2011-05-09 72 views
4

我有一個名爲Result<T>的對象,它有一個接受參數IEnumerable<T>的構造函數。如果可能,我希望能夠傳入數據表。將數據錶轉換爲IEnumerable <T>以傳遞給結果<T>(IEnumerable <T> data);

我試過datatable.AsEnumerable(),但是我在那裏綁定到數據,它抱怨'MyProperty'不是'DataRow'類型的字段或屬性 - 這很有意義,因爲'MyProperty'不是'DataRow' ,但它是我數據表中的一列。

有沒有辦法將數據錶轉換爲我可以傳遞給Result對象並仍然綁定到Gridview的東西?

+0

爲什麼不直接使用實體框架? – 2011-05-09 23:23:42

回答

1

我結束了使用LINQ to轉換將數據表放入一個匿名對象數組中。

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

然後,我創建了一個通用功能使用類型推斷匿名對象數組養成使用Dim result = GetResult(objs)

3

如果你能寫,可以構建具有使用單一的DataRow「myProperty的」對象實例的功能,那麼你可以做這樣的:

datatable.AsEnumerable().Select(MyConversionFunction); 
+2

IIRC,it's dtatable.Rows.AsEnumerable() – 2011-05-09 23:24:32

+0

@Cylon Cat - Nope,它[實際上不是](http://msdn.microsoft.com/zh-cn/library/system.data.datatableextensions.asenumerable.aspx) 。 – 2011-05-10 16:48:34

+0

我坐正確! – 2011-05-10 17:17:42

0

的結果對象的構造

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

調用如何

table.Rows.Cast<DataRow>() 
+0

這會做什麼?你會不會遇到同樣的問題? 'MyProperty'不會是DataRow實例上的屬性。 – adam0101 2011-05-10 17:01:15

+0

那麼,應該給你的行,並且你確實可以訪問每一行的每一列,例如在每個循環中,對於每行將作爲DataRow在行 \t Dim val = row(「MyProperty」) Next' – bottlenecked 2011-05-10 18:34:20

0

如果你想將你輸入的數據錶轉換爲EnumerableRowCollection可以使用以下內容:

EnumerableRowCollection<YourTypedRow> typedRowCollection = datatable.AsEnumerable().Cast<YourTypedRow>(); 
相關問題