方法: ユーザー定義関数を呼び出す (Entity Framework)

Entity SQL を使用すると、クエリでユーザー定義関数を呼び出すことができます。 これらの関数は、クエリでインラインで定義するか、概念モデルの一部として定義できます。 詳細については、「ユーザー定義関数 (Entity SQL)」を参照してください。

このトピックの例には、Adventure Works Sales Model が使用されています。このトピックのコードを実行するには、あらかじめプロジェクトに Adventure Works Sales Model を追加し、Entity Framework を使用するようにプロジェクトを構成しておく必要があります。詳細については、「Entity Data Model ウィザードを使用する方法 (Entity Framework)」、または「Entity Framework プロジェクトを手動で構成する方法」、および「Entity Data Model を手動で定義する方法 (Entity Framework)」を参照してください。

次の例は、OrderTotal という関数を Entity SQL クエリで定義します。 この関数は SalesOrderHeader オブジェクトを受け取り、SubTotalTaxAmt、および Freight プロパティの値を追加して、合計支払額を再計算します。 次に、この関数はクエリ投影で呼び出され、データ ソースから返された TotalDue 値を使用して再計算した TotalDue を返します。 USING 演算子は、関数に渡された SalesOrderHeader オブジェクトの名前空間の指定に必要です。

' Query that calls the OrderTotal function to recalculate the order total. 
Dim queryString As String = "USING Microsoft.Samples.Entity;" & _
    " FUNCTION OrderTotal(o SalesOrderHeader) AS (o.SubTotal + o.TaxAmt + o.Freight)" & _
    " SELECT order.TotalDue AS currentTotal, OrderTotal(order) AS calculated" & _
    " FROM AdventureWorksEntities.SalesOrderHeaders AS order WHERE order.Contact.ContactID = @customer"

Dim customerId As Integer = 364


Using context As New AdventureWorksEntities()
    Dim query As New ObjectQuery(Of DbDataRecord)(queryString, context)
    query.Parameters.Add(New ObjectParameter("customer", customerId))

    For Each rec As DbDataRecord In query
        Console.WriteLine("Order Total: Current - {0}, Calculated - {1}.", rec(0), rec(1))
    Next
End Using
// Query that calls the OrderTotal function to recalculate the order total.
string queryString = @"USING Microsoft.Samples.Entity;
    FUNCTION OrderTotal(o SalesOrderHeader) AS
    (o.SubTotal + o.TaxAmt + o.Freight)

    SELECT [order].TotalDue AS currentTotal, OrderTotal([order]) AS calculated
    FROM AdventureWorksEntities.SalesOrderHeaders AS [order]
    WHERE [order].Contact.ContactID = @customer";

int customerId = 364;


using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    ObjectQuery<DbDataRecord> query = new ObjectQuery<DbDataRecord>(queryString, context);
    query.Parameters.Add(new ObjectParameter("customer",customerId));

    foreach (DbDataRecord rec in query)
    {
        Console.WriteLine("Order Total: Current - {0}, Calculated - {1}.", 
            rec[0], rec[1]);
    }
}

参照

処理手順

方法: クエリを使用してモデル定義関数を呼び出す (LINQ to Entities)

概念

ユーザー定義関数 (Entity SQL)

その他のリソース

How to: Define Custom Functions in the Conceptual Model
How to: Define Custom Functions in the Conceptual Model