Вы пробовали это:
var x = (from c in db.Employees
where c.Pensioners == 1
select c)
Дополнительная информация:
Если вы используете метод для объекта в запросе linq, то дозвуковой системе необходимо знать, как преобразовать его в чистый SQL-код. Это не работает по умолчанию и должно быть реализовано для каждого известного метода для каждого поддерживаемого типа для каждого поставщика данных (если отличается от реализации по умолчанию). Так что для дозвуковой работы есть куча работы.
Хорошей отправной точкой для определения того, что поддерживается, а что нет, является класс TSqlFormatter. Посмотрите на protected override Expression VisitMethodCall(MethodCallExpression m)
https://github.com/subsonic/SubSonic-3.0/blob/master/SubSonic.Core/Linq/Structure/TSqlFormatter.cs
Уже есть реализация для Equals
else if (m.Method.Name == "Equals")
{
if (m.Method.IsStatic && m.Method.DeclaringType == typeof(object))
{
sb.Append("(");
this.Visit(m.Arguments[0]);
sb.Append(" = ");
this.Visit(m.Arguments[1]);
sb.Append(")");
return m;
}
else if (!m.Method.IsStatic && m.Arguments.Count == 1 && m.Arguments[0].Type == m.Object.Type)
{
sb.Append("(");
this.Visit(m.Object);
sb.Append(" = ");
this.Visit(m.Arguments[0]);
sb.Append(")");
return m;
}
else if (m.Method.IsStatic && m.Method.DeclaringType == typeof(string))
{
//Note: Not sure if this is best solution for fixing side issue with Issue #66
sb.Append("(");
this.Visit(m.Arguments[0]);
sb.Append(" = ");
this.Visit(m.Arguments[1]);
sb.Append(")");
return m;
}
}
Полагаю, Prnsioners - это целочисленный тип, поэтому вам, в основном, нужно добавить еще один оператор if и перекомпоновать дозвуковой.
Это должно работать, но я не проверял.
else if (!m.Method.IsStatic && m.Method.DeclaringType == typeof(int))
{
sb.Append("(");
this.Visit(m.Arguments[0]);
sb.Append(" = ");
this.Visit(m.Arguments[1]);
sb.Append(")");
return m;
}
(или вы можете попробовать подход ==
, как в примере сверху).