Linq Select语句不起作用
本文关键字:不起作用 语句 Select Linq | 更新日期: 2023-09-27 17:59:14
运行以下查询时出现以下错误
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")。
- TerminalId=int
- PinExpireDateTime=日期时间
有什么想法吗?
如果您在:pin.TerminalID.Equals((int)terminalId)
中比较ints
,请在查询前强制转换并使用==
。
假设terminalId
是int
pins.TerminalID == terminalId
我不明白你为什么要把dateNow
转换成DateTime
,因为它已经是DateTime
了,所以不需要它。
我在这里注意到了一些事情。
-
您已经使用了
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;
}