實體框架轉換問題:無法翻譯Double.Parse
使用LINQ to Entities 時,需要注意的是,並非所有方法都適用LINQ to Objects中支援的可以直接翻譯成SQL查詢。一個常見錯誤是無法在 LINQ to Entities 語句中使用 Double.Parse()。
解決Double.Parse() 的問題
解決此問題,您可以定義一個執行解析的自訂方法,並使用*.edmx 中定義的函數將其轉換為有效的SQL
範例:
定義 SQL 轉換:
在 *. edmx檔案中,加入以下函數定義:
<Function Name="ParseDouble" ReturnType="Edm.Double"> <Parameter Name="stringvalue" Type="Edm.String"></Parameter> <DefiningExpression> cast(stringvalue as Edm.Double) </DefiningExpression> </Function>
在程式碼中建立自訂方法:
在您的ObjectContext 部分類別(通常由EDMX生成)中,加入以下方法:
public static double ParseDouble(string stringvalue) { return Double.Parse(stringvalue); }
此方法將在 LINQ 查詢期間充當存根,轉換為 EDMX 中定義的 SQL CAST 語句。
範例(應用自訂方法):
在 LINQ 語句中,取代Double.Parse() 與 YourObjectContext.ParseDouble()的任何實例都可以利用自訂方法並允許轉換為SQL.
其他注意事項:
請記住,如果特定上下文中的實體框架不支援Math.Round() ,則可能也需要類似的方法。使用 EDM 規範函數清單來確定要定義的適當 SQL 函數。
以上是如何解決實體框架無法翻譯Double.Parse()的問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!