объединение оператора
это эквивалентно
FormsAuth = formsAUth == null ? new FormsAuthenticationWrapper() : formsAuth
Linq to Entities не поддерживает столько преобразований функций в sql, размещенный на сервере.
ToString (для чего угодно) - одна из них
Вот список поддерживаемых функций
Это уже задавалось ранее при переполнении стека, в частности , спрашивая, как преобразовать int в строку
Вот способ сделать это.
int[] x = new int[] {11,3,15,7,19};
var j = from s in x where s.ToString().StartsWith( "1") select s.ToString();
Console.WriteLine( j );
У меня была похожая проблема
IQueryable<Street> query = db.Streets.AsQueryable();
query = query.Where(street => street.Name.ToLower().StartsWith(keyword))
.Take(10)
.OrderBy(street => street.Name);
var list = query.Select(street => new
{
street.StreetId,
Name = street.Name + " " + street.Suburb.Name + " " + street.Suburb.State.Name + " " + street.Suburb.Postcode
});
Street.suburk.postCode был бросается «Невозможно преобразовать не примативную ошибку типа», как его int? После последующей ссылки Shuggy я зафиксировал, добавив .aseNumerable для силы int? -> Строконное преобразование «Клиентская сторона» I.E. LINQ к объектам. I.E.
var list = query.AsEnumerable().Select(street => new
{
street.StreetId,
Name = street.Name + " " + street.Suburb.Name + " " + street.Suburb.State.Name + " " + street.Suburb.Postcode
});
В EF v4 вы можете использовать SqlFunctions.StringConvert. Таким образом, ваш код будет выглядеть следующим образом:
from s in ctx.Services
where SqlFunctions.StringConvert((double)s.Code).StartsWith("1")
select s
EDIT
Как упоминает Рик в своем комментарии, причина приведения int к double (десятичная дробь, вероятно, тоже подходит) в том, что функция не имеет перегрузки для int.