【问题标题】:Unable to create a constant value of System.Object无法创建 System.Object 的常量值
【发布时间】: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_IDpro_id有哪些类型?你能减少代码以删除没有有问题的位吗? (例如,你能把投影中的大部分属性去掉吗?)
  • 已编辑以避免过多的水平滚动 - 请注意,您不需要转换 prtQuery.ToList() 的结果;已经是List&lt;HickeryDickeryDock&gt;了。
  • pro_id 和 prt_pro_id 是保存 guid 值的 nvarchar(128) 字段。我实际上删除了很多选择部分,但我会尝试只使用我提供的部分来运行它,看看它是否有效。
  • " 并注意不需要转换 prtQuery.ToList() 的结果;它已经是 List"。最初我没有这个,但为了检查,我把它放进去,因为这个错误对我来说没有意义,而且我已经看到代码中发生了奇怪的事情。

标签: c# linq-to-sql


【解决方案1】:

Name = m.PRO_FirstName + ' ' + m.PRO_LastName。这是导致它失败的线路。一旦我删除了+ ' ' + m.PRO_LastName,它就起作用了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多