Linq int to string

时间:2009-08-04 15:50:55

标签: .net linq linq-to-entities

如何将int和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

9 个答案:

答案 0 :(得分:55)

使用EF v4,您可以使用SqlFunctions.StringConvert。所以你的代码看起来像这样:

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

修改

正如Rick在他的评论中提到的,将int转换为double(十进制可能也有效)的原因是该函数没有int的重载。

答案 1 :(得分:33)

Linq to Entities不支持尽可能多的函数转换为服务器托管的sql。

ToString(在任何事物上)就是其中之一

以下是supported functions

的列表

之前已经有人问过堆栈溢出asking how to convert an int to a string

答案 2 :(得分:2)

我有类似的问题

        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? - &GT;字符串转换'客户端'即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

        });

答案 3 :(得分:2)

使用LINQ to Objects时,可以使用ToString()帮助程序。

答案 4 :(得分:1)

将IQueryable强制转换为IEnumerable,因为IQueryable继承了IEnumerable。请参阅http://msdn.microsoft.com/en-us/library/system.linq.iqueryable.aspx - 具体来说:'枚举导致与IQueryable对象关联的表达式树被执行。我认为重要的是'执行表达式树的定义“特定于查询提供者'。

IQueryable非常强大但在这种情况下被滥用。

答案 5 :(得分:1)

我尝试了这种解决方法,它对我有用:

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

希望这有帮助

答案 6 :(得分:-1)

这是一种方法。

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

答案 7 :(得分:-1)

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

答案 8 :(得分:-1)

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

在试错的最后几天里,我找了很多搜索来找到这个。

我希望这能帮助一些编码员。