我有以下我创建的存储过程,它在我的项目之外工作正常。但是,我遇到了从我的项目中实际调用它的问题。并得到以下错误:
无法投射类型为“SingleResult 1[Foo.getOrderedGameListByAddonCountResult]' to type 'System.Collections.Generic.List
1 [FOO.game]”的对象。
这是发生错误时调用它的函数的基本片段:
Private Shared Function getListofGames(ByVal sortVal As SortType, ByVal listtype As listType, ByVal filterValue As String) As iList(Of game)
Using db As New FooDataClassesDataContext
Dim retVal As List(Of game) = Nothing
Select Case sortVal
Case SortType.Name
retVal = db.games.OrderBy(Function(f) f.game_name).ToList
Case SortType.AddOnCount
retVal = db.getOrderedGameListByAddonCount
End Select
Return retVal
End Using
End Function
这就是 Sproc 的样子:
CREATE PROC getOrderedGameListByAddonCount
as
select * from games as b
left join (
select game_addons.game_id, COUNT(*) as addonCount from game_addons
group by game_addons.game_id) as p on B.game_id = p.game_id
order by p.addonCount DESC
go
由于没有找到一种有意义的方法来解决数据列表的 Cast 问题,我决定使用 Linq to SQL 语句,但是我无法创建与 Sproc 相同的 Ling 语句。
需要发生的是在 game_addons 中可以有许多包含 game_id 的插件。此列是 FK,与游戏表 game_id 相关联。我正在尝试返回按 game_addons 最多的游戏排序的游戏列表。
我去过 MSDN、Google 和无数的 SO 链接,但一切要么真的很短,要么我发现的 Linq 命令太扭曲了,我无法清楚地阅读它以查看创建框架的框架。