Bagikan melalui


Cara: Memanggil Fungsi Kanonis

Kelas EntityFunctions berisi metode yang memperlihatkan fungsi kanonik untuk digunakan dalam kueri LINQ ke Entitas. Untuk informasi tentang fungsi kanonik, lihat Fungsi Kanonik.

Catatan

Metode AsUnicode dan AsNonUnicode di kelas EntityFunctions tidak memiliki padanan fungsi kanonik.

Fungsi kanonik yang melakukan penghitungan pada sekumpulan nilai dan mengembalikan nilai tunggal (juga dikenal sebagai fungsi kanonik agregat) dapat langsung dipanggil. Fungsi kanonik lainnya hanya dapat dipanggil sebagai bagian dari kueri LINQ ke Entitas. Untuk memanggil fungsi agregat secara langsung, Anda harus meneruskan ObjectQuery<T> ke fungsi tersebut. Untuk informasi selengkapnya, lihat contoh kedua di bawah ini.

Anda dapat memanggil beberapa fungsi kanonik dengan menggunakan metode runtime bahasa umum (CLR) di kueri LINQ ke Entitas. Untuk daftar metode runtime bahasa umum yang memetakan ke fungsi kanonik, lihat Metode runtime bahasa umum ke Pemetaan Fungsi Kanonik.

Contoh 1

Contoh berikut menggunakan Model Penjualan AdventureWorks. Contoh menjalankan kueri LINQ ke Entitas yang menggunakan metode DiffDays untuk mengembalikan semua produk dengan perbedaan antara SellEndDate dan SellStartDate kurang dari 365 hari:

using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
    var products = from p in AWEntities.Products
                   where EntityFunctions.DiffDays(p.SellEndDate, p.SellStartDate) < 365
                   select p;
    foreach (var product in products)
    {
        Console.WriteLine(product.ProductID);
    }
}
Using AWEntities As New AdventureWorksEntities()
    Dim products = From p In AWEntities.Products _
                   Where EntityFunctions.DiffDays(p.SellEndDate, p.SellStartDate) < 365 _
                   Select p

    For Each product In products
        Console.WriteLine(product.ProductID)
    Next
End Using

Contoh 2

Contoh berikut menggunakan Model Penjualan AdventureWorks. Contoh memanggil metode StandardDeviation agregat secara langsung untuk mengembalikan simpangan baku subtotal SalesOrderHeader. Perhatikan bahwa ObjectQuery<T> diteruskan ke fungsi, yang memungkinkan fungsi dipanggil tanpa menjadi bagian dari kueri LINQ ke Entitas.

using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
    double? stdDev = EntityFunctions.StandardDeviation(
        from o in AWEntities.SalesOrderHeaders
        select o.SubTotal);

    Console.WriteLine(stdDev);
}
Using AWEntities As New AdventureWorksEntities()
    Dim stdDev As Double? = EntityFunctions.StandardDeviation( _
        From o In AWEntities.SalesOrderHeaders _
        Select o.SubTotal)

    Console.WriteLine(stdDev)
End Using

Lihat juga