5

以下のコードがクエリから結果を返さないのに、2番目のサンプルが返す理由を誰かが理解するのを手伝ってくれますか(2番目のサンプルで基準を使用しようとすると悲惨です!)

 type EbayData = 
    ODataService<"http://ebayodata.cloudapp.net">

let Ebay = EbayData.GetDataContext()

let Favourites title number = query{
    for deal in Ebay.Deals do
    where (deal.Title.Contains(title))
    take number
    }


let Esearch title number =  [for item in Favourites title number do 
                                  yield item]

作業バージョン:

type Catalog = ODataService< "http://ebayodata.cloudapp.net/" >

let ebay = Catalog.GetDataContext()

let trial =
            [ for item in ebay.Deals do
               yield item]

|>などをどうしても、最初のリストをどの種類のリストにも出力できないようです。2番目のサンプルは、テキストクエリを実行するための多くの結果を返さないようです。ただし、私の本当の問題は、F#バージョンのLINQから何も取得できないように見えることです。

出力は、VBを使用してリストと通信するWPFアプリケーションで使用されます。私はそれを10項目の無差別リストに入力したので、endは機能します。これはVBコードです。

 For Each Deal In trial.Where(Function(p) p.Title.Contains(title.Text))
                DealResults.Items.Add(buildStackPanel(Deal))
            Next

Ctrl-Kを押しても、この投稿のFシャープの間隔が機能していないようです。誰かが私が間違っていることを教えてくれれば、それは2番目の質問だと思います。

4

1 に答える 1

5

なぜこれがうまくいかないのかわかりません。私は以下をノックアウトしましたが、うまくいくようです:

open Microsoft.FSharp.Data
type Catalog = TypeProviders.ODataService< "http://ebayodata.cloudapp.net/" >

let ebay = Catalog.GetDataContext()

let trial =
            [ for item in ebay.Deals do
               yield item]
let trial2 = query {
                for deal in ebay.Deals do
                where (deal.Title.Contains "a")
                take 2
             }
let ESearch title number =
             query {
                for deal in ebay.Deals do
                where (deal.Title.Contains title)
                take number
             }

[<EntryPoint>]
let main argv = 
    trial |> Seq.take 2 |> Seq.iter (fun d -> printfn "%s" d.Title)
    trial2 |> Seq.iter (fun d -> printfn "%s" d.Title)
    ESearch "a" 2 |> Seq.iter (fun d -> printfn "%s" d.Title)

    0

存在しないものを探してみたのではないでしょうか?現時点で取引は 6 件しかないため、可能性は低くありません。

アイテムのクエリ

ここで eBay OData サービスについて読んでください: http://ebayodata.cloudapp.net/docs Item をクエリするとき、特別なニーズがあります:

(Seller、PrimaryCategoryId、SecondaryCategoryId の検索パラメーターまたは $filter が必要です)

そのため、Items を照会するには、少なくとも検索フレーズを提供する必要があります。あなたのwhereステートメントは、最終的な URL の検索パラメーターに変換されません。このタイプ プロバイダーにカスタム パラメーターを追加するには、.AddQueryOptionを実行します。

let ItemSearch title number =
             query {
                for item in ebay.Items
                             .AddQueryOption("search", title) do
                take number
             }
// use
ItemSearch "wario" 2 |> Seq.iter (fun d -> printfn "%s" d.Title)
于 2012-12-04T09:22:50.650 に答える