在LINQ to Entities中将字符串转换为整数?

5

我需要把一个string类型的值转换成int类型,但是似乎LINQ to Entities不支持这样做。

对于以下代码,我遇到了一个错误。

var query = (from p in dc.CustomerBranch
             where p.ID == Convert.ToInt32(id) // here is the error.
             select new Location()
             {
                 Name      = p.BranchName,
                 Address   = p.Address,
                 Postcode  = p.Postcode,
                 City      = p.City,
                 Telephone = p.Telephone
             }).First();
return query;

LINQ to Entities无法识别方法'Int32 ToInt32 (System.String)',此方法无法转换为存储表达式。
2个回答

4

在LINQ之外进行转换:

var idInt = Convert.ToInt32(id);
var query = (from p in dc.CustomerBranch
             where p.ID == idInt 
             select new Location()
             {
                 Name      = p.BranchName,
                 Address   = p.Address,
                 Postcode  = p.Postcode,
                 City      = p.City,
                 Telephone = p.Telephone
             }).First();
return query;

是的,那肯定可以工作:)。但我想在查询内部肯定有一种方法可以做到这一点。 - Reza.Hoque
1
取决于LINQ提供程序,什么可以在LINQ中正常工作,什么不能(即LINQ提供程序是否能够将表达式转换为底层语言),EF提供程序不支持此转换表达式。 - Ankur
哦,错误是因为 LINQ 正试图将您的语句转换为 SQL,但它无法识别 convert 相当于 SQL cast,不确定它是否会认为 parse 也相当。 - Manatherin
谢谢大家。p.ID.ToString()==id 这个不起作用,甚至 int.parse(id) 也不行。但是我找到了答案。干杯! - Reza.Hoque
@abzarak 我在问题中没有看到任何关于“正确表达式语法”的句子。如果您有正确的答案,请告诉我们。 - Ankur
显示剩余2条评论

-2

不,他们不会这样做。可以这样想: ToString()Parse() 都是对象上的方法。由于LINQ to Entities试图将LINQ表达式转换为SQL,所以它们不可用。

如果需要在查询中执行此操作,则可能可以使用Cast,因为它在LINQ to Entities中应该可用。对于ToString,您可以使用 SqlFunctions.StringConvert()


3
Cast方法将提供的集合中的元素转换为指定类型。如果您向Cast方法提供一个字符串,它会尝试将该字符串转换为请求类型的IEnumerable。 - Dejan Janjušević

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接