.net Linq int to string

xurqigkl  于 2023-05-02  发布在  .NET
关注(0)|答案(9)|浏览(96)

我如何转换和整型为字符串?以下各项均不起作用:

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*

nnvyjq4y

nnvyjq4y1#

在EF v4中,您可以使用SqlFunctions.StringConvert。所以你的代码会像这样结束:

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

编辑

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

vxf3dgd4

vxf3dgd42#

Linq to Entities不支持将函数转换为服务器托管的SQL。
ToString(on anything)就是其中之一
下面是supported functions的列表
以前在堆栈溢出时,特别是asking how to convert an int to a string时,已经询问过此问题

laik7k3q

laik7k3q3#

我也遇到过类似的问题

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.邮政编码抛出'无法转换非primitive类型错误'作为其int?在以下shuggy的链接后,我修正了添加。AsEnumerable强制int?- 〉字符串转换'客户端' i。e. 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

        });
ijxebb2r

ijxebb2r4#

当使用LINQ to Objects时,你可以使用ToString()帮助器。

2q5ifsrm

2q5ifsrm5#

将IQueryable强制转换为IEnumerable,因为IQueryable继承IEnumerable。参见http://msdn.microsoft.com/en-us/library/system.linq.iqueryable.aspx-具体如下:'枚举导致执行与IQueryable对象关联的表达式树。我认为重要的是''执行表达式树'的定义是特定于查询提供程序的'。
IQueryable非常强大,但在此上下文中被误用。

z2acfund

z2acfund6#

我尝试了这个解决方案,它对我很有效:

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

希望这对你有帮助

5jdjgkvh

5jdjgkvh7#

这里有一个方法来做到这一点。

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

r6vfmomb8#

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

xoshrz7s9#

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.年龄)对我也不起作用,该字段的类型为Nullable
在过去的几天里,我花了很多时间才找到这个。
我希望这对一些程序员有帮助。

相关问题