错误:“在此上下文中仅支持原始类型或枚举类型”
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.cs
的App_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
的行抛出了错误。以上是关于错误:“在此上下文中仅支持原始类型或枚举类型”的主要内容,如果未能解决你的问题,请参考以下文章
函数输入参数类型为枚举时,则限定函数参数的接收范围,非枚举值输入则错误