Linq Select Statement不起作用

时间:2011-06-16 14:50:25

标签: c# linq entity-framework entity

运行以下查询时出现以下错误

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 = datetime

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

如果您要比较intspin.TerminalID.Equals((int)terminalId),请先查询并使用==

假设terminalId是int

pins.TerminalID == terminalId

我不明白为什么你要dateNowDateTime它不需要它,因为它已经DateTime

答案 1 :(得分:0)

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

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

  2. 您有一些不必要的显式演员表,而您使用的是Equals方法,而不仅仅是==。我不确定你为什么这样做。 Int32会覆盖Equals,因此它应与使用==运算符相同;它应该正常工作 - 但我不确定这个错误可能来自哪里。 LINQ to Entities可能无法支持将Int32.Equals(int)推送到SQL查询,即使它支持Int32.==就好了。

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