【问题标题】:Unable to create a constant value of type ' ' . Only primitive types or enumeration types are supported in this context无法创建类型为“ ”的常量值。此上下文仅支持原始类型或枚举类型
【发布时间】:2015-04-27 13:17:24
【问题描述】:

我正在尝试显示查询结果,困难在于表中的每一行都将包含一个 Route 对象和一个 Visit 对象列表。我想将查询结果保存在 RouteViewModels 列表中:

public class RouteViewModel
{
    public Route Route { get; set; }
    public List<Visit> Visits { get; set; }
}

我运行查询并尝试保存结果:

var query =
            from r in db.Routes
            join v in visitList on r equals v.Route into visits
            select new { RouteObject = r, VisitList = visits };

int i = 0;
foreach (var prodGroup in query)
        {
            vm[i].Route = prodGroup.RouteObject; //vm is an list of RouteViewModels.
            j = 0;
            foreach(var prodItem in prodGroup.VisitList)
            {
                vm[i].Visits[j] = prodItem;
                j++;
            }
            i++;
        }

我在对类似帖子的回答之后编写了 foreach 循环,但该行给了我错误:

无法创建“ApplicationDatabase.Visit”类型的常量值。此上下文仅支持原始类型或枚举类型

如何访问路线及其访问列表?

【问题讨论】:

  • 该错误来自哪一行?
  • 经过一番谷歌搜索后,问题可能在于您使用的是visitList。 "You cannot join a set of data in the database with another set of data that is in memory."
  • 尝试将访问类型更改为 IEnumerable。的,尝试枚举 query.ToList() 而不是查询。这实际上会强制执行您的查询,因此您将所有数据都保存在内存中。
  • 这个答案对你有帮助吗?
  • 谢谢,使用 @KendallFrey 的评论完成了这项工作 - 我已经编写了一个单独的查询来获取 VisitList,我删除了它并将查询包含在上面的查询中。

标签: c# asp.net-mvc linq


【解决方案1】:

我不确定你使用的是 EF,如果你是的话

如果路由表中有主键,则使用它来比较对象。喜欢

var query =
            from r in db.Routes
            join v in visitList on r.Id equals v.Route.Id into visits
            select new { RouteObject = r, VisitList = visits };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 2020-10-08
    • 2013-04-30
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多