错误:“在此上下文中仅支持原始类型或枚举类型”

Posted

技术标签:

【中文标题】错误:“在此上下文中仅支持原始类型或枚举类型”【英文标题】:Error: "Only primitive types or enumeration types are supported in this context" 【发布时间】:2013-06-27 21:19:38 【问题描述】:

浏览了相关帖子,但仍有困难。这是我的代码:

var id = Request.QueryString["id"].AsInt();
var accountNum = Request.QueryString["accountnum"];

var orderIDs = new List<OrderID>();

// Order IDs are in the form: OrderNum-OrderLine[,...]
// e.g. orderids=41417-6,36703-1

foreach (var orderID in Request.QueryString["orderids"].Split(',')) 
    var components = orderID.Split('-');
    orderIDs.Add(new OrderID() 
        OrderNum = components[0].AsInt(), 
        OrderLine = components[1].AsInt()
    );


var dbContext = new TelecomEntities();
var assignedLines = dbContext.LineAssignments
    .Where(a => orderIDs
        .Any(i => a.OrderNum == i.OrderNum && a.OrderLine == i.OrderLine))
    .ToList();

运行此程序时,我收到错误:无法创建类型为“OrderID”的常量值。此上下文仅支持原始类型或枚举类型。

根据我在其他帖子中阅读的内容,我无法执行查询,因为orderIDs 不在dbContent 上下文中。

编辑: OrderID 类

public class OrderID

    public int OrderNum  get; set; 
    public int OrderLine  get; set; 

    public OrderID()  

【问题讨论】:

OrderID 类的声明在哪里? 它在OrderID.csApp_Code文件夹中 抱歉,我的意思是,您能否向我们展示您的 OrderID 类声明。 :-) 【参考方案1】:

问题在于 EF 无法将您对 OrderID 对象的比较转换为 SQL。一种选择可能是将订单 ID 保留为字符串:

var id = Request.QueryString["id"].AsInt();
var accountNum = Request.QueryString["accountnum"];

string[] orderIDs;

// Order IDs are in the form: OrderNum-OrderLine[,...]
// e.g. orderids=41417-6,36703-1

orderIDs = Request.QueryString["orderids"].Split(',');

var dbContext = new TelecomEntities();
var assignedLines = dbContext.LineAssignments
    .Where(a => orderIDs
        .Any(on => on.Equals(a.OrderNum + "-" + a.OrderLine))
    .ToList();

【讨论】:

【参考方案2】:

我打赌它是 AsInt(我以前从未见过,但我看到它是网页的一部分)。

您是否在 foreach 中得到错误?如果是这样,请尝试以下方法:

        foreach (var orderID in testOrderIDs.Split(','))
        
            var components = orderID.Split('-');
            orderIDs.Add(new OrderID()
            
                OrderNum = int.Parse(components[0]),
                OrderLine = int.Parse(components[1])
            );
        

【讨论】:

我在其中分配assignedLines 的行抛出了错误。

以上是关于错误:“在此上下文中仅支持原始类型或枚举类型”的主要内容,如果未能解决你的问题,请参考以下文章

(8/8)RPC接口能用枚举就请考虑枚举

导入具有导出枚举的模块时找不到模块错误

函数输入参数类型为枚举时,则限定函数参数的接收范围,非枚举值输入则错误

尝试在枚举中添加 IsSerializable 时出现 gwt 错误

Cython 中的枚举成员名称重复 - 重新声明错误?

使用枚举获取Entity Framework迁移错误