Caan somone建议我尝试实现的最佳方法(linq to sql,返回数据列表以显示在网格/列表等等)...它抱怨匿名类型转换,并从我的内容在阅读,这不是优雅的做法。
Public Function GetHistory(ByVal historyId As Integer) As List(Of ?????????)
Using dc As New myDataContext(Application.GetConnection)
Return (From t In dc.ActionTypes, a In t.MyTable Where a.HistoryID = historyId Select a.ActionOn, a.ActionBy, t.Description, a.ImpactedItem, a.ActionDescription).ToList
End Using
End Function
答案 0 :(得分:5)
问题是匿名类型没有可用作函数返回值的编译时类型,所以????在你的列表中(Of ????)并不是编译器可以知道的东西。
由于您将此绑定到UI元素,因此最好的办法是将返回值设为IEnumerable或IList。您应该能够将控件绑定到该控件(因为绑定使用了封面下的反射)。
答案 1 :(得分:3)
匿名类型不能离开函数的范围。所以你要做的就是不可能。您必须创建一个可以使用返回类型的类型(结构或类)。
答案 2 :(得分:2)
定义您自己的数据类对象,例如 MyClass ,其属性为 ActionOn,ActionBy,Description,ImpactedItem,ActionDescription 。
然后使用:
Public Function GetHistory(ByVal historyId As Integer) As List(Of MyClass)
Using dc As New myDataContext(Application.GetConnection)
Return ( _
From t In dc.ActionTypes, a In t.MyTable _
Where a.HistoryID = historyId _
Select New MyClass _
With {.ActionOn=a.ActionOn, .ActionBy=a.ActionBy, ...} _
).ToList
End Using
End Function
答案 3 :(得分:2)
您可以使用linq函数CAST,然后将列表转换为Object并返回Ienumerable of Object。
Public Function GetHistory(ByVal historyId As Integer) As List(Of Object)
Using dc As New myDataContext(Application.GetConnection)
Return (From t In dc.ActionTypes, a In t.MyTable Where _
a.HistoryID = historyId Select a.ActionOn, a.ActionBy, _
t.Description, a.ImpactedItem, a.ActionDescription) _
.Cast(Of Object).ToList()
End Using
End Function
答案 4 :(得分:1)
如果该类是唯一一个将使用结果的类(虽然这似乎不太可能,因为你创建了函数Public
),你可以创建一个嵌套的类/结构来保存结果。否则,您无法执行的操作:匿名类型可能只有method scope。