2012-08-16 39 views
2

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

ABCD0000001 ABCD0000002 ...

但随后用户可以manuplate的代码和生成的代码中的任何地方输入任何字符(当然后来我检查代码的唯一性之后,但这是不感兴趣的)。所以数据库中的记录可以是

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异常:方法“布尔的TryParse(System.String,的Int32的ByRef )”没有支持转换为SQL“

我应该怎么做是我的方式太复杂是否有更聪明的方式 预先感谢

+0

可能重复的[T-SQL则IsNumeric()和LINQ到SQL](http://stackoverflow.com/questions/2329580/t-sql-isnumeric-and-linq-to-sql) – Magnus 2012-08-16 17:31:23

+0

用户定义函数的存储过程是这里的一种方式。 – 2012-08-17 22:36:13

回答

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(); 
+0

'ABCD00000T01'? – 2012-08-17 22:36:51

+0

@GertArnold从OP的问题('Int64.TryParse(c.Code.Substring(3,10),out t)')中可以看到,他只想选择符合ABCD和7位数字的代码。 – 2012-08-17 23:10:35

+0

我认为你就在那里。 – 2012-08-17 23:17:40