Aracılığıyla paylaş


İzlenecek yol: OData hizmet sağlayıcıları türü (F#) kullanarak erişme

OData, yani Açık Veri Protokolü, Internet üzerinden veri aktarmak için kullanılan bir protokoldür. Birçok veri sağlayıcısı bir OData web hizmeti yayımlayarak verilerine erişim sağlar. F# 3.0 içinde herhangi bir OData kaynağındaki verilere ODataService tür sağlayıcısı tarafından otomatik olarak üretilen veri türlerini kullanarak erişebilirsiniz. OData hakkında daha fazla bilgi için, bkz: Introducing OData.

Bu adım adım kılavuz bir OData hizmetine istemci türler üretmek için F# ODataService tür sağlayıcısını nasıl kullanacağınızı ve hizmetin sağladığı veri beslemelerini nasıl sorgulayacağınızı gösterir.

Bu izlenecek yol, başarılı olması için bu sırayla gerçekleştirmeniz gereken aşağıdaki görevleri gösterir:

  • Bir OData hizmeti için bir istemci projesi yapılandırma

  • OData türlerine erişme

  • Bir OData hizmetini sorgulama

  • OData isteğini doğrulama

Bir OData hizmeti için bir istemci projesi yapılandırma

Bu adımda, bir OData tür sağlayıcısı kullanmak için bir proje ayarlarsınız.

Bir OData hizmeti için bir istemci projesi ayarlamak için

  • Bir F# Konsol Uygulaması projesi açın, ve ardından System.Data.Services.Client Framework derlemesine bir başvuru ekleyin.

  • Uzantılar altında, FSharp.Data.TypeProviders derlemesine bir başvuru ekleyin.

OData türlerine erişme

Bu adımda, bir OData hizmeti için türlere ve veriye erişimi sağlayan bir tür sağlayıcısı oluşturursunuz.

OData türlerine erişmek için

  • Kod Düzenleyicisi içinde, bir F# kaynak dosyası açın, ve aşağıdaki kodu girin.

    open Microsoft.FSharp.Data.TypeProviders
    
    
    type Northwind = ODataService<"http://services.odata.org/Northwind/Northwind.svc/">
    
    let db = Northwind.GetDataContext()
    let fullContext = Northwind.ServiceTypes.NorthwindEntities()
    

    Bu örnekte, F# tür sağlayıcısını çağırdınız ve belirttiğiniz OData URI'yi temel alan bir türler kümesi oluşturması için talimat verdiniz. Veri ile ilgili bilgi içeren kullanılabilir iki nesne vardır: biri bir basitleştirilmiş veri bağlamıdır, örnekte db. Bu nesne yalnızca veritabanı ile ilgili veri türlerini içerir, ve tablolar ve beslemeler için türleri içerir. Diğer nesne, bu örnekte fullContext, bir DataContext örneğidir ve pek çok ek özellikler, yöntemler ve olaylar içerir.

Bir OData hizmetini sorgulama

Bu adımda, OData hizmetini sorgulamak için F# sorgu iadelerini kullanırsınız.

Bir OData hizmetini sorgulamak için

  1. Tür sağlayıcısını ayarladığınıza göre, artık bir OData hizmetini sorgulayabilirsiniz.

    OData kullanılabilir sorgu işlemlerinin yalnızca bir altkümesini destekler. Aşağıdaki işlemler ve onlara karşılık gelen anahtar sözcükler desteklenir:

    • projeksiyon (select)

    • filtre uygulama (where, dize ve tarih işlemleri kullanarak)

    • sayfalama (skip, take)

    • sıralama (orderBy, thenBy)

    • OData'ya özel işlemler olan AddQueryOption ve Expand

    Daha fazla bilgi için bkz. LINQ Considerations.

    Eğer bir besleme ya da tablo içindeki tüm girdileri istiyorsanız, sorgu ifadesinin en basit biçimini kullanın, aşağıdaki koddaki gibi:

    query { for customer in db.Customers do
            select customer }
    |> Seq.iter (fun customer ->
        printfn "ID: %s\nCompany: %s" customer.CustomerID customer.CompanyName
        printfn "Contact: %s\nAddress: %s" customer.ContactName customer.Address
        printfn "         %s, %s %s" customer.City customer.Region customer.PostalCode
        printfn "%s\n" customer.Phone)
    
  2. select anahtar sözcüğünden sonra bir veri grubu kullanarak istediğiniz alanları ya da sütunları belirtin.

    query { for cat in db.Categories do
            select (cat.CategoryID, cat.CategoryName, cat.Description) }
    |> Seq.iter (fun (id, name, description) ->
        printfn "ID: %d\nCategory: %s\nDescription: %s\n" id name description)
    
  3. Bir where yan tümcesi kullanarak koşulları belirtin.

    query { for employee in db.Employees do
            where (employee.EmployeeID = 9)
            select employee }
    |> Seq.iter (fun employee ->
        printfn "Name: %s ID: %d" (employee.FirstName + " " + employee.LastName) (employee.EmployeeID))                         
    
  4. Contains yöntemini kullanarak sorguya bir altdize koşulu belirtin. Aşağıdaki sorgu adında "Chef" olan tüm ürünleri döndürür. Ayrıca GetValueOrDefault kullanımına dikkat edin. UnitPrice null olabilen bir değerdir, bu nedenle değeri ya Value özelliğini kullanarak almalısınız, ya da GetValueOrDefault çağırmalısınız.

    query { for product in db.Products do
            where (product.ProductName.Contains("Chef"))
            select product }
    |> Seq.iter (fun product ->
        printfn "ID: %d Product: %s" product.ProductID product.ProductName
        printfn "Price: %M\n" (product.UnitPrice.GetValueOrDefault()))
    
  5. Bir dizenin belirli bir altdize ile bittiğini belirtmek için EndsWith yöntemini kullanın.

    query { for product in db.Products do
            where (product.ProductName.EndsWith("u"))
            select product }
    |> Seq.iter (fun product ->
        printfn "ID: %d Product: %s" product.ProductID product.ProductName
        printfn "Price: %M\n" (product.UnitPrice.GetValueOrDefault()))
    
  6. && işlecini kullanarak bir where yan tümcesi içinde koşulları birleştirin.

    // Open this module to use the nullable operators ?> and ?<.
    open Microsoft.FSharp.Linq.NullableOperators
    
    let salesIn1997 = query { for sales in db.Category_Sales_for_1997 do
                              where (sales.CategorySales ?> 50000.00M && sales.CategorySales ?< 60000.0M)
                              select sales }
    salesIn1997
    |> Seq.iter (fun sales ->
        printfn "Category: %s Sales: %M" sales.CategoryName (sales.CategorySales.GetValueOrDefault()))
    

    ?> ve ?< işleçleri null olabilen işleçlerdir. Null olabilen eşitlik ve karşılaştırma işleçlerinin tam bir kümesini kullanabilirsiniz. Daha fazla bilgi için bkz. Linq.NullableOperators Modülü (F#).

  7. Sıralama belirtmek için sortBy sorgu işlecini kullanın, ve başka bir sıralama düzeyi belirtmek için thenBy kullanın. Sorgunun seçili kısmı içindeki bir veri grubu kullanımına da dikkat edin. Bu nedenle, sorgu bir öğe türü olarak bir veri grubuna sahiptir.

    printfn "Freight for some orders: "
    query { for order in db.Orders do
            sortBy (order.OrderDate.Value)
            thenBy (order.OrderID)
            select (order.OrderDate, order.OrderID, order.Customer.CompanyName)
             }
    |> Seq.iter (fun (orderDate, orderID, company) ->
        printfn "OrderDate: %s" (orderDate.GetValueOrDefault().ToString())
        printfn "OrderID: %d Company: %s\n" orderID company)
    
  8. skip işlecini kullanarak belirli bir sayıda kaydı yok sayın, ve take işlecini kullanarak döndürülecek kayıt sayısını belirtin. Bu şekilde, veri beslemeleri üzerinde sayfalama uygulayabilirsiniz.

    printfn "Get the first page of 2 employees."
    query { for employee in db.Employees do
            take 2
            select employee }
    |> Seq.iter (fun employee ->
        printfn "Name: %s ID: %d" (employee.FirstName + " " + employee.LastName) (employee.EmployeeID)) 
    
    printfn "Get the next 2 employees."
    query { for employee in db.Employees do
            skip 2
            take 2
            select employee }
    |> Seq.iter (fun employee ->
        printfn "Name: %s ID: %d" (employee.FirstName + " " + employee.LastName) (employee.EmployeeID)) 
    

OData isteğini doğrulama

Her OData sorgusu belirli bir OData istek URI olarak çevrilir. Bu URI'yı, belki hata ayıklama amacıyla, tam veri bağlamı nesnesi üzerindeki SendingRequest olayına bir olay işleyicisi ekleyerek doğrulayabilirsiniz.

OData isteğini doğrulamak için

  • OData istek URI'sını doğrulamak için, aşağıdaki kodu kullanın:

        // The DataContext property returns the full data context.
        db.DataContext.SendingRequest.Add (fun eventArgs -> printfn "Requesting %A" eventArgs.Request.RequestUri)
    

    Önceki kodun çıktısı:

                  
                

Ayrıca bkz.

Görevler

Sorgu İfadeleri (F#)

Başvuru

ODataService türü sağlayıcı (F#)

Diğer Kaynaklar

LINQ Considerations