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=日期时间

有什么想法吗?

Linq Select语句不起作用

如果您在:pin.TerminalID.Equals((int)terminalId)中比较ints,请在查询前强制转换并使用==

假设terminalId是int

pins.TerminalID == terminalId

我不明白你为什么要把dateNow转换成DateTime,因为它已经是DateTime了,所以不需要它。

我在这里注意到了一些事情。

  1. 您已经使用了pinspin,但我认为它们应该是相同的标识符。这可能只是将代码复制到问题中的拼写错误。

  2. 您有一些不必要的显式强制转换,并且您使用的是Equals方法,而不仅仅是==。我不知道你为什么这么做。对于Int32,Equals被重写,因此它应该与使用==运算符相同;它应该工作正常——但我不确定这个错误可能来自哪里。LINQ to Entities可能不支持将Int32.Equals(int)推送到SQL查询,尽管它支持Int32.==

我唯一能想到的另一种可能性是,pin.TerminalIDpin.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;
}