0

我有以下我创建的存储过程,它在我的项目之外工作正常。但是,我遇到了从我的项目中实际调用它的问题。并得到以下错误:

无法投射类型为“SingleResult 1[Foo.getOrderedGameListByAddonCountResult]' to type 'System.Collections.Generic.List1 [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 命令太扭曲了,我无法清楚地阅读它以查看创建框架的框架。

4

1 回答 1

0

这最终是因为我将类型声明为 Linq to SQL 数据库表而导致的。SPROC 返回的结果不能使用 linq to sql 表。表中有 4 列被声明为,SPROC 返回 6 列。简单的解决方法是删除 GetListOfGames 函数中的类型声明。

这确实给我留下了另一个问题。如何定义这些混蛋对象,以便我可以真正声明一个类型。

于 2013-06-14T23:04:17.887 回答