【问题标题】:Asp.net c#, Unable to create a constant value of type 'System.Object'Asp.net c#,无法创建“System.Object”类型的常量值
【发布时间】:2015-09-04 05:59:31
【问题描述】:
var result = from q in memberDbSet
     select new
     {
         no = q.no,
         fullName = q.firstName + ' ' + q.lastName
     };

无法创建“System.Object”类型的常量值。仅有的 在此上下文中支持原始类型或枚举类型。

我遇到了上述错误,我做错了什么?

【问题讨论】:

  • 它是 linq 到实体??
  • 不是System.Char?? memberDbSet 是什么?
  • memberDbSet 是 IQueryable
  • 没有使用字符串代替字符帮助?我很惊讶……

标签: c# asp.net linq


【解决方案1】:

发生这种情况是因为 LINQ 提供程序无法将 q.firstName + ' ' + q.lastName 表达式转换为 SQL。解决此问题的方法是调用 AsEnumerable() 将数据带入内存,然后在那里进行其余的选择:

var result = (from q in memberDbSet /* where clause goes here */)
   .AsEnumerable()
   . Select(q => new {
        no = q.no,
        fullName = q.firstName + ' ' + q.lastName
   });

确保在AsEnumerable() 之前将所有过滤都放入查询中,以避免将更多数据读入内存。

【讨论】:

  • AsEnumerable 不是真正的修复,只是可以作为最后手段应用的解决方法。我相信在这种情况下,根本问题可以得到解决。记录在案。
【解决方案2】:

您正在连接字符串和char。显然,实体框架不喜欢这样。改成

fullName = q.firstName + " " + q.lastName

唯一的事情是,我会预料到

无法创建“System.Char”类型的常量值

【讨论】:

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