2011-06-16 78 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; 
}