2009-08-04 542 views
48

如何将字符串转换为int?无下面做的作品:Linq 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

+0

前两个应该工作......你能详细说明“以下哪一项......没有工作”的含义? – 2009-08-04 15:54:56

+0

你只是没有得到任何结果吗?您是否确认“代码”列包含以“1”开头的值? – Keith 2009-08-04 15:55:49

+1

www.linqpad.net非常适合学习Linq(以及.NET中的其他任何东西)。它是免费的,强烈推荐。另外,其19美元的Intellisense非常棒。 – 2009-08-04 16:01:00

回答

-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

这不会帮助他 - 他正在使用linq来实体 – ShuggyCoUk 2009-08-04 16:26:27

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? - >字符串转换'客户端',即LINQ到对象。即

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

     }); 
+0

谢谢,你明确保存了我的一天。 在这里添加`AsEnumerable`是关键。 – 2011-04-08 20:44:26

55

对于EF v4,你可以使用SqlFunctions.StringConvert。所以,你的代码将结束看起来像这样:

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

编辑

瑞克在他的评论中提到,将铸造的int双(十进制大概也工作)的原因是,该函数没有int的重载。

1

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

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

1

我尝试这种解决方法,它的工作对我来说:

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

希望这有助于

2

当使用LINQ to对象,你可以使用toString()帮手。

-1
from s in ctx.Services.ToList() 
    where s.Code.ToString().StartsWith("1") 
    select s 
-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((双)C。年龄)没有为我工作,无论是字段为可空类型

在过去的几天里,我花了很多搜索试验和错误来找到它。

我希望这可以帮助几个编码器。