LINQ to Entities とカスタム SQL 関数
LINQ to Entities を使用すると、開発者は SQL によく似た使い慣れた構文を使用してデータをクエリできます。ただし、特定の操作では SQL に直接変換できないカスタム関数が必要になる場合があります。このような場合、開発者は Entity Data Model (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());
カスタムラウンド関数
If 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 中国語 Web サイトの他の関連記事を参照してください。