C# 如何在不枚举查询的情况下将字符串转换为int

C# 如何在不枚举查询的情况下将字符串转换为int,c#,linq,entity-framework,C#,Linq,Entity Framework,也许我是盲人,但我找不到如何将字符串转换为int query.OrderByDescending(a => SqlFunctions.IsNumeric( a.Index.Substring(a.Index.Length - 4, 4)) == 1 ? Convert.ToInt32(a.Index.Substring(a.Index.Length - 4, 4)) : 0); 但是,正如我所怀疑的,它返回了一个错误 LINQ to实体无法识别方法“Int32”

也许我是盲人,但我找不到如何将字符串转换为int

query.OrderByDescending(a => SqlFunctions.IsNumeric(
    a.Index.Substring(a.Index.Length - 4, 4)) == 1 ?
    Convert.ToInt32(a.Index.Substring(a.Index.Length - 4, 4)) :
    0);
但是,正如我所怀疑的,它返回了一个错误

LINQ to实体无法识别方法“Int32” ToInt32(System.String)'

此外,SqlFunctions没有成员转换。是否有任何方法可以在不枚举查询的情况下实现这一点

编辑:
int.Parse
抛出

LINQ to实体无法识别方法“Int32” 解析(System.String)

inta=int.Parse(字符串)


在c#

int.TryParse(X.Number,out-tmp)中将字符串转换为int的方法是什么?tmp:0

这是一个长期的尝试,因为我自己还没有尝试过(我几周前读到过)

如果SqlFunctions类不提供所需的函数,则可以在SQL Server端创建自定义函数,然后在.NET端创建类似于SqlFunctions类的类来调用自定义函数。您必须使用一个属性来装饰.NET类

也许像这样的办法行得通


你可以阅读更多关于这方面的内容。

你用
TryParse
试过吗?大概是这样的:

int number;
query.OrderByDescending(a =>(
                        int.TryParse(a.Item1.Substring(1, 2), 
                                        out number) == true  ? number: 0));

我总是在lambda表达式中使用
TryParse

int.Parse
而不是
Convert.ToInt32
工作吗?@JonSkeet这有什么区别?我不知道。@SriramSakthivel:可能LINQ to实体知道
int.Parse
,但不知道
Convert.ToInt32
。看起来不是这样,但至少是有可能的。@安德鲁:你不能从
string
转换到
int
。这个问题有点令人沮丧。就在昨天下午我碰到了它。您必须记住的一点是,EF必须能够生成SQL,而不管提供程序是什么。例如,SQL Server和MySQL之间生成的SQL可能不同。它必须具有足够的通用性,能够处理所有情况。这听起来不错,但似乎是一个非常常见的问题。如果没有人知道更短的答案。@MarcinJ请注意,如果您先使用代码而不是edm文件,您必须这样做,但这并不能提供问题的答案。要评论或要求作者澄清,请在他们的帖子下方留下评论-你可以随时在自己的帖子上发表评论,一旦你有足够的评论,你就可以发表。@JNYRanger好的,我想评论他的帖子,但我意识到我没有足够的声誉。我认为这是解决他的问题的一个可能办法。下次我会记住的。对不起,@jnlanger-我认为这是一个合理的回答。