我有一些包含像「1/2010」,「2/2010」或「13/2010」這樣的列中的年度序列數據的表。我想通過此列從此表中訂購數據。所以我應該爲排序創建順序值,就像下面的SQL表達式一樣。在EF 4.0中創建自定義排序(例如「07/2010」數據)的最佳方式是什麼?
-- This code should work if amount of data is less than 1000 record per year.
CAST(SUBSTRING(ReceiveID, 0, CHARINDEX('/', ReceiveID)) AS INT) + 1000 * CAST(SUBSTRING(ReceiveID, CHARINDEX('/', ReceiveID) + 1, 4) AS INT) AS OrderReceiveID
但是,我想用EF 4.0寫這個代碼,但我有一些問題。
首先,我嘗試在LINQ查詢中創建順序表達式。但我不能將字符串調用爲整數轉換函數,如「int.Parse」,因爲它無法將其轉換爲SQL語句。其次,我在數據庫中創建標量值函數,用於將年度序列數據字符串轉換爲像「1/2010」這樣的整數,並將其轉換爲20100001.但由於它僅支持存儲過程,因此無法將其導入到edmx文件。
最後,我爲此表創建自定義視圖,包括自定義順序列(用於2010001等數據),並使用附加列來訂購此表。一切運作良好。但我不喜歡這個,因爲我不需要爲每個表創建一個視圖。
你有沒有想法解決這個問題,而不需要觸摸數據庫或創建共享函數來將序列數據轉換爲整數值,就像我的第二個想法?
感謝,
是的。我知道,但這種方式會在我的項目中創建一個非強類型的查詢,這對我來說是不可接受的。此外,每次更改數據庫中的列後,我都必須檢查/驗證此查詢,而不是同步edmx文件和構建。 – 2010-10-14 02:57:57
您可以使用context.ExecuteStoreQuery重載獲取強類型的ObjectResult 。但遺憾的是,每次更改數據庫模式時都必須檢查查詢。 –
Devart
2010-10-14 07:32:33