2012-08-16 36 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