Linq int в строку - PullRequest
       18

Linq int в строку

48 голосов
/ 04 августа 2009

как я могу привести и 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

EDIT

Я получаю ошибку:

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

Ответы [ 9 ]

55 голосов
/ 20 июля 2010

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

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

EDIT

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

33 голосов
/ 04 августа 2009

Linq to Entities не поддерживает столько преобразований функций, сколько размещено на сервере sql.

ToString (на чем угодно) является одним из них

Вот список поддерживаемых функций

Это уже спрашивалось ранее о переполнении стека спрашивалось, как преобразовать int в строку

2 голосов
/ 02 апреля 2012

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

2 голосов
/ 21 января 2010

У меня была похожая проблема

        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 выбрасывал «не удалось преобразовать ошибку не примитивного типа» как 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

        });
1 голос
/ 22 марта 2012

Я попробовал этот обходной путь, и он работал для меня:

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

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

1 голос
/ 25 марта 2011

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

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

0 голосов
/ 12 декабря 2012
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

Мне потребовалось много поисков за последние несколько дней проб и ошибок, чтобы найти это.

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

0 голосов
/ 18 мая 2012
from s in ctx.Services.ToList()
    where s.Code.ToString().StartsWith("1")
    select s   
0 голосов
/ 04 августа 2009

Вот способ сделать это.

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 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...