LINQ to Entities 和自訂 SQL 函數
LINQ to Entities 允許開發人員使用與 SQL 非常相似的熟悉語法來查詢資料。但是,某些操作可能需要無法直接轉換為 SQL 的自訂函數。在這種情況下,開發人員必須在實體資料模型 (EDMX) 檔案中定義自訂函數,並在程式碼中實作匹配的方法。
在 EDMX 中定義自訂函數
在
<Function Name="ParseDouble" ReturnType="Edm.Double"> <Parameter Name="stringvalue" Type="Edm.String" /> <DefiningExpression> cast(stringvalue as Edm.Double) </DefiningExpression> </Function>
在程式碼中實作自訂函數
在從EDMX 檔案產生的分部類中,實作與中定義的自訂函數相符的方法EDMX:
using System.Data.Objects.DataClasses; public partial class YourObjectContext { /// <summary> /// This method exists for use in LINQ queries, /// as a stub that will be converted to a SQL CAST statement. /// </summary> [EdmFunction("YourModel", "ParseDouble")] public static double ParseDouble(string stringvalue) { return Double.Parse(stringvalue); } }
在LINQ 中應用自訂函數
在LINQ 語句中,將對應的函數呼叫替換為實現的方法:
model.Referring = Math.Round(_newSurveyResult.Select(m => string.IsNullOrEmpty(m.Question1) ? 0 : YourObjectContext.ParseDouble(m.Question1)).Average());
自訂圓形函數
如果LINQ 語句也包含對Math.Round 的調用,請在EDMX中定義自訂函數:
<Function Name="Round" ReturnType="Edm.Double"> <Parameter Name="input" Type="Edm.Double" /> <DefiningExpression> Round(input) </DefiningExpression> </Function>
其他注意事項
查閱 EDM 規範函數清單以確保所需函數可以轉換為 SQL 非常重要。如果無法翻譯某個函數,則可能需要採用不同的方法,例如實作預存程序。
以上是如何將自訂 SQL 函數與 LINQ to Entities 整合?的詳細內容。更多資訊請關注PHP中文網其他相關文章!