Подтвердить что ты не робот

Linq int to string

как я могу нарисовать и int в строку? Ни одно из следующих действий не работает:

from s in ctx.Services
    where s.Code.ToString().StartsWith("1")
    select s

from s in ctx.Services
    where Convert.ToString(s.Code).StartsWith("1")
    select s

from s in ctx.Services
    where ((string)s.Code).ToString().StartsWith("1")
    select s

ИЗМЕНИТЬ

Ошибка, которую я получаю:

LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression

4b9b3361

Ответ 2

С EF v4 вы можете использовать SqlFunctions.StringConvert. Таким образом, ваш код будет выглядеть следующим образом:

from s in ctx.Services
where SqlFunctions.StringConvert((double)s.Code).StartsWith("1")
select s

ИЗМЕНИТЬ

Как упоминает Рик в своем комментарии, причина включения int в double (возможно, работает десятичное число), заключается в том, что функция не имеет перегрузки для int.

Ответ 3

У меня была аналогичная проблема

        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.Suburb.Postcode выбрасывает 'can not convert non primative type error' как его int? После следующей shuggy ссылки я исправил добавлением .AsEnumerable, чтобы заставить int? → преобразование строк "клиентская сторона", т.е. LINQ to Objects. т.е.

var list = query.AsEnumerable().Select(street => new
        {
            street.StreetId,
            Name = street.Name + " " + street.Suburb.Name + " " + street.Suburb.State.Name + " " + street.Suburb.Postcode

        });

Ответ 4

При использовании LINQ to Objects вы можете использовать помощник ToString().

Ответ 5

отличает IQueryable от IEnumerable, поскольку IQueryable наследует IEnumerable. см. http://msdn.microsoft.com/en-us/library/system.linq.iqueryable.aspx - в частности: "Enumeration заставляет дерево выражений, связанное с объектом IQueryable, выполняться". Я думаю, что важная вещь: "Определение" выполнение дерева выражений "относится к поставщику запросов".

IQueryable очень силен, но используется в этом контексте неправильно.

Ответ 6

Я пробовал это обходное решение, и это сработало для меня:

from s in ctx.Services
where (s.Code + "").StartsWith("1")
select s

Надеюсь, что это поможет

Ответ 7

Вот как это сделать.

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

Ответ 8

from s in ctx.Services.ToList()
    where s.Code.ToString().StartsWith("1")
    select s   

Ответ 9

var items = from c in contacts
select new ListItem
{
    Value = String.Concat(c.ContactId), //This Works in Linq to Entities!
    Text = c.Name
};

Я обнаружил, что SqlFunctions.StringConvert((double) c.Age) не работает для меня, либо поле имеет тип Nullable

В течение последних нескольких дней проб и ошибок я много искал, чтобы найти это.

Я надеюсь, что это поможет нескольким кодировщикам.