Linq中的IsNumeric等价物

时间:2012-08-16 15:18:49

标签: .net sql linq linq-to-sql isnumeric

我需要在Linq中使用一个与SQL中的IsNumeric函数等效的函数。我想要做的是获得与常见模式匹配的代码。代码应该是唯一的,它们是由代码生成的。模式是这样的:

ABCD0000001 ABCD0000002 ...

然后用户可以编写代码并在生成的代码中的任何位置输入任何字符(当然,之后我会检查代码的唯一性,但这是不感兴趣的)。所以数据库中的记录可以是

ABCD0000001 ABCD00000T01 ABCDT0000002 ..等等。

我想要的是获取最后一个以编程方式生成(不由用户操作)代码并检索最后的数字,以便我可以将其添加1,从而产生唯一代码。 (所以最后一个自动生成的代码是ABCD0007865,那么新代码应该是ABCD0007866)

我试过

var lastCode = (
    from c in sedc.Codes
    where SqlMethods.Like(c.Code, "ABCD" + "%")
    where Int64.TryParse(c.Code.Substring(3,10),out t)
    orderby c.Code descending
    select c)
    .FirstOrDefault();

但是这段代码抛出异常说法 NotSupportedException:方法'Boolean TryParse(System.String,Int32 ByRef)'没有支持的SQL转换。“

我该怎么办?我的方式太复杂了吗?有更聪明的方法吗? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

这应该有效:

var lastCode = (
    from c in sedc.Codes
    where SqlMethods.Like(c.Code, "ABCD[0-9][0-9][0-9][0-9][0-9][0-9][0-9]")
    orderby c.Code descending
    select c)
    .FirstOrDefault();