【发布时间】:2014-02-27 23:55:27
【问题描述】:
当我点击List<HickeryDickeryDock> dockMatches = (List<HickeryDickeryDock>)prtQuery.ToList();line 时,弹出错误“无法创建'System.Object'类型的常量值。在此上下文中仅支持原始类型或枚举类型”。我之前返回了一个通用列表对象,所以我可能正在寻找一些关于为什么会出现这个的东西。
var prtQuery = (from p in db.PRTs
join m in db.PROs on p.PRT_PRO_ID equals m.PRO_ID
where p.PRT_PRO_ID != pro_id
select new HickeryDickeryDock
{
Name = m.PRO_FirstName + ' ' + m.PRO_LastName,
DisplayName = m.PRO_DisplayName,
Gender = m.PRO_Gender,
Age = prm.PRM_AgeStart >= p.PRT_AgeStart && prm.PRM_AgeStart <= p.PRT_AgeEnd ? 2 : 0,
Huckelberry = SqlFunctions.CharIndex("Huckelberry", p.PRT_Finnery) > 0 ? 2 : SqlFunctions.CharIndex("Spontaneous", prm.PRM_FINNERY) == 0 ? 0 : 2
}).Take(100);
List<HickeryDickeryDock> dockMatches = (List<HickeryDickeryDock>)prtQuery.ToList();
【问题讨论】:
-
p.PRT_PRO_ID和pro_id有哪些类型?你能减少代码以删除没有有问题的位吗? (例如,你能把投影中的大部分属性去掉吗?) -
已编辑以避免过多的水平滚动 - 请注意,您不需要转换
prtQuery.ToList()的结果;已经是List<HickeryDickeryDock>了。 -
pro_id 和 prt_pro_id 是保存 guid 值的 nvarchar(128) 字段。我实际上删除了很多选择部分,但我会尝试只使用我提供的部分来运行它,看看它是否有效。
-
" 并注意不需要转换 prtQuery.ToList() 的结果;它已经是 List
"。最初我没有这个,但为了检查,我把它放进去,因为这个错误对我来说没有意义,而且我已经看到代码中发生了奇怪的事情。
标签: c# linq-to-sql