运行以下查询时出现以下错误
public int getPinCount(int terminalId, ref int pinnumber)
{
using (var dbEntities = new DatabaseAccess.Schema.BMIEntityModel())
{
DateTime dateNow = DateTime.Now;
return (from pins in dbEntities.PinIds
where pin.TerminalID.Equals((int)terminalId)
&& pin.PinExpireDateTime < (DateTime)dateNow
select pins).Count();
}
return 0;
}
无法创建常量值 输入'System.Object'。只有原始 类型('如Int32,String和 在此背景下支持Guid'。
有什么想法吗?
答案 0 :(得分:2)
如果您要比较ints
:pin.TerminalID.Equals((int)terminalId)
,请先查询并使用==
。
假设terminalId
是int
pins.TerminalID == terminalId
我不明白为什么你要dateNow
来DateTime
它不需要它,因为它已经DateTime
。
答案 1 :(得分:0)
我在这里注意到一些事情。
您已使用pins
和pin
,但我认为它们应该是相同的标识符。这可能只是将代码复制到您的问题中的错误。
您有一些不必要的显式演员表,而您使用的是Equals
方法,而不仅仅是==
。我不确定你为什么这样做。 Int32会覆盖Equals
,因此它应与使用==
运算符相同;它应该正常工作 - 但我不确定这个错误可能来自哪里。 LINQ to Entities可能无法支持将Int32.Equals(int)
推送到SQL查询,即使它支持Int32.==
就好了。
我能想到的唯一另一种可能性是pin.TerminalID
或pin.PinExpireDateTime
可能不是您认为的确切数据类型,但您必须自己检查。
无论哪种方式,您至少可以简化代码:
public int getPinCount(int terminalId, ref int pinnumber)
{
using (var dbEntities = new DatabaseAccess.Schema.BMIEntityModel())
{
DateTime dateNow = DateTime.Now;
return (from pin in dbEntities.PinIds
where pin.TerminalID == terminalId
&& pin.PinExpireDateTime < dateNow
select pin).Count();
}
return 0;
}