2011-06-16 79 views
1

运行下面的查询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 = INT
  • PinExpireDateTime =日期时间

任何想法?

+0

什么版本的EF您使用的是,出于好奇:

无论哪种方式,你至少可以简化你的代码? – 2011-06-16 15:22:03

回答

2

如果您在比较intspin.TerminalID.Equals((int)terminalId)将其转换为查询并使用==

假设terminalId为int

pins.TerminalID == terminalId 

我不明白为什么是U铸造dateNowDateTime这是没有必要的,因为它已经DateTime

+0

你能举个例子吗? – 2011-06-16 14:56:26

+0

非常感谢你用'dbEntities.PinIds '中的引脚修复它在哪里(pins.TerminalID == terminalId && pins.PinExpireDateTime <(日期时间)dateNow)' 选择引脚 – 2011-06-16 15:12:21

0

我在这里注意到的情侣事物。

  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; 
}