【发布时间】:2013-10-28 17:12:40
【问题描述】:
我正在尝试针对两个上下文运行查询,但每次都会收到此错误:
无法创建类型的常量值 'CC_Metrics_Apps.RefQutReturns'。只有原始类型('例如 Int32, 在此上下文中支持 String 和 Guid')。
我正在尝试这样查询:
Public Function IDQ() As List(Of RefQutReturns)
Dim val As List(Of RefQutReturns) = (From x In GlobalVar.db.RET.RefQutReturns
Select x).ToList
Return val
End Function
Public Function QueTypeDD() As IEnumerable(Of SelectListItem)
Dim val As New List(Of SelectListItem)
Dim valQ = From v In GlobalVar.db.PS.TaskQueueTypes
Join x In IDQ() On v.QutID Equals x.QutID.ToString
Select v
val.Add(New SelectListItem With {.Text = "Select Item", .Value = 0})
For Each v In valQ
val.Add(New SelectListItem() With {.Text = v.QutDesc, .Value = v.QutID})
Next
Return val
End Function
【问题讨论】:
-
由于
.ToList()在IDQ()方法中,您试图将已经在客户端实现的结果与来自服务器端GlobalVar.db.PS.TaskQueueTypes的结果结合起来。 EF 不支持将本地非原始类型与在数据库中评估的 (SQL) 查询混合。 -
@Pawel 所以我需要在运行 Join 查询之前将两个查询都放入内存?
-
在您的情况下,您从一个上下文中获得了具体化的返回,您尝试将其用作数据库查询的参数(因此您将 Linq 与对象和 Linq 与实体混合),这是不受支持的。您有 2 个上下文 - 假设(在大多数情况下有效)是不同的上下文意味着不同的数据库,因此 EF 将无法创建可以连接结果的单个查询。问题是为什么你有 2 个上下文 - 如果它们都在同一个数据库上工作 - 它们可以合并吗?如果没有 - 您需要将结果带给客户。
-
@Pawel 您能否将您的评论转换为答案,以便我给您打勾。通过将两个查询放入内存然后按照您的建议加入它们来解决该问题。但是 .tolist 仍然是必需的。
标签: vb.net asp.net-mvc-3 linq linq-to-sql dbcontext