方法: データベース関数を呼び出すHow to: Call Database Functions

SqlFunctions クラスには、LINQ to Entities クエリで使用する SQL Server 関数を公開するメソッドが含まれています。The SqlFunctions class contains methods that expose SQL Server functions to use in LINQ to Entities queries. LINQ to Entities クエリで SqlFunctions メソッドを使用すると、対応するデータベース関数がデータベースで実行されます。When you use SqlFunctions methods in LINQ to Entities queries, the corresponding database functions are executed in the database.

注意

値のセットに対して計算を実行して 1 つの値を返すデータベース関数 (集計データベース関数とも呼ばれる) は、直接呼び出すことができます。Database functions that perform a calculation on a set of values and return a single value (also known as aggregate database functions) can be directly invoked. 他の正規関数は、LINQ to Entities クエリの一部としてしか呼び出すことができません。Other canonical functions can only be called as part of a LINQ to Entities query. 集計関数を直接呼び出すには、その関数に ObjectQuery<T> を渡す必要があります。To call an aggregate function directly, you must pass an ObjectQuery<T> to the function. 詳細については、以下の 2 番目の例を参照してください。For more information, see the second example below.

注意

SqlFunctions クラスのメソッドは、SQL Server 関数に固有です。The methods in the SqlFunctions class are specific to SQL Server functions. 他のプロバイダーから、データベース関数を公開する同様のクラスを入手できることがあります。Similar classes that expose database functions may be available through other providers.

Example

次の例では、 AdventureWorks Sales Modelを使用します。The following example uses the AdventureWorks Sales Model. この例では、CharIndex メソッドを使用する LINQ to Entities クエリを実行して、姓が "Si" で始まる連絡先をすべて返します。The example executes a LINQ to Entities query that uses the CharIndex method to return all contacts whose last name starts with "Si":

using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
    // SqlFunctions.CharIndex is executed in the database.
    var contacts = from c in AWEntities.Contacts
                   where SqlFunctions.CharIndex("Si", c.LastName) == 1
                   select c;

    foreach (var contact in contacts)
    {
        Console.WriteLine(contact.LastName);
    }
}
Using AWEntities As New AdventureWorksEntities()

    ' SqlFunctions.CharIndex is executed in the database.
    Dim contacts = From c In AWEntities.Contacts _
        Where SqlFunctions.CharIndex("Si", c.LastName) = 1 _
        Select c

    For Each contact In contacts
        Console.WriteLine(contact.LastName)
    Next
End Using

Example

次の例では、 AdventureWorks Sales Modelを使用します。The following example uses the AdventureWorks Sales Model. この例では、集計 ChecksumAggregate メソッドを直接呼び出します。The example calls the aggregate ChecksumAggregate method directly. ObjectQuery<T> は関数に渡されているため、LINQ to Entities クエリに含まれていなくても呼び出すことができる点に注意してください。Note that an ObjectQuery<T> is passed to the function, which allows it to be called without being part of a LINQ to Entities query.

using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
    // SqlFunctions.ChecksumAggregate is executed in the database.
    decimal? checkSum = SqlFunctions.ChecksumAggregate(
        from o in AWEntities.SalesOrderHeaders
        select o.SalesOrderID);

    Console.WriteLine(checkSum);
}
Using AWEntities As New AdventureWorksEntities()

    ' SqlFunctions.ChecksumAggregate is executed in the database.
    Dim checkSum As Integer = SqlFunctions.ChecksumAggregate( _
        From o In AWEntities.SalesOrderHeaders _
        Select o.SalesOrderID)

    Console.WriteLine(checkSum)
End Using

関連項目See also