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
Ответы
Ответ 1
Linq to Entities не поддерживает столько преобразований функций на сервер, на котором размещается sql.
ToString (на любом) является одним из них
Здесь список поддерживаемых функций
Об этом ранее спрашивали о переполнении стека о том, как преобразовать int в строку
Ответ 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
В течение последних нескольких дней проб и ошибок я много искал, чтобы найти это.
Я надеюсь, что это поможет нескольким кодировщикам.