Пара вещей, которые я заметил здесь.
Вы использовали и pins
, и pin
, но я думаю, что они должны иметь одинаковый идентификатор.Это может быть просто опечатка от копирования вашего кода в ваш вопрос.
У вас есть несколько ненужных явных приведений, и вы используете метод Equals
вместо просто ==
.Я не уверен, почему ты это делаешь.Equals
переопределяется для 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;
}