Linq Select语句不起作用

| 运行以下查询时出现以下错误
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 =整数 PinExpireDateTime =日期时间 有任何想法吗?     
已邀请:
        如果要比较
ints
pin.TerminalID.Equals((int)terminalId)
在查询前将其转换并使用
==
。 假设
terminalId
是int
pins.TerminalID == terminalId
我不明白为什么您不把
dateNow
转换为
DateTime
,因为它已经是
DateTime
,所以不需要。     
        我在这里注意到的几件事。 您已经使用了ѭ9和ѭ10,但是我认为它们应该是相同的标识符。这可能只是将代码复制到问题中的错字。 您已经进行了一些不必要的显式强制转换,并且使用的是
Equals
方法,而不仅仅是
==
。我不确定为什么要这么做。 In11ѭ被Int32覆盖,因此它应与使用
==
运算符相同;它应该可以正常工作-但我不确定该错误可能还会从哪里来。 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;
}
    

要回复问题请先登录注册