データベース関数を呼び出す方法 (LINQ to Entities)
SqlFunctions クラスには、LINQ to Entities クエリで使用する SQL Server 関数を公開するメソッドが含まれています。 LINQ to Entities クエリで SqlFunctions メソッドを使用すると、対応するデータベース関数がデータベースで実行されます。
注 : |
---|
値のセットに対して計算を実行して 1 つの値を返すデータベース関数 (集計データベース関数とも呼ばれる) は、直接呼び出すことができます。他の正規関数は、LINQ to Entities クエリの一部としてしか呼び出すことができません。集計関数を直接呼び出すには、その関数に ObjectQuery を渡す必要があります。詳細については、以下の 2 番目の例を参照してください。 |
注 : |
---|
SqlFunctions クラスのメソッドは、SQL Server 関数に固有です。他のプロバイダーから、データベース関数を公開する同様のクラスを入手できることがあります。 |
例
AdventureWorks Sales Model を使用する例を次に示します。 この例では、CharIndex メソッドを使用する LINQ to Entities クエリを実行して、姓が "Si" で始まる連絡先をすべて返します。
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
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);
}
}
AdventureWorks Sales Model を使用する例を次に示します。 この例では、集計 ChecksumAggregate メソッドを直接呼び出します。 ObjectQuery は関数に渡されているため、LINQ to Entities クエリに含まれていなくても呼び出すことができる点に注意してください。
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
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);
}