2012-12-04 26 views
5

Bất kỳ ai cũng có thể giúp tôi hiểu tại sao đoạn mã dưới đây không trả về kết quả từ truy vấn, ví dụ mẫu thứ hai (mặc dù woe betide tôi nếu tôi cố gắng sử dụng tiêu chí trên một giây)Nhà cung cấp loại EBAY ODATA trong F # và không nhận được kết quả nào với LINQ

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] 

phiên bản làm việc:

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

let ebay = Catalog.GetDataContext() 

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

tôi dường như không thể ra đầu tiên đối với bất kỳ loại danh sách, không có vấn đề gì làm với |> vv các mẫu thứ hai doesn! dường như không mang lại nhiều resuls để làm một truy vấn văn bản trên. Tuy nhiên, vấn đề thực sự của tôi là tôi dường như không thể có được bất cứ điều gì trong LINQ trong phiên bản F #.

Đầu ra được sử dụng trong một ứng dụng WPF nơi tôi sử dụng VB để nói chuyện với danh sách. Tôi đã điền một danh sách không phân biệt đối xử gồm 10 mục với nó, để kết thúc không hoạt động. Đây là mã VB.

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

Khoảng cách cho chữ F Sharp trên bài đăng này dường như không hoạt động khi tôi nhấn Ctrl-K để bất cứ ai có thể cho tôi biết tôi đang làm gì - tôi đoán đó là câu hỏi thứ hai!

Trả lời

5

Tôi không biết tại sao điều này không hiệu quả với bạn. Tôi đã loại bỏ các nội dung sau và dường như hoạt động:

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 

Có thể bạn đã thử tìm kiếm nội dung không tồn tại? Tại thời điểm này chỉ có 6 giao dịch, do đó, điều này là không thể.

Truy vấn Items

đọc về dịch vụ eBay OData đây: http://ebayodata.cloudapp.net/docs Nó có nhu cầu đặc biệt khi truy vấn cho Items:

(thông số tìm kiếm hoặc $ lọc với người bán, PrimaryCategoryId hoặc SecondaryCategoryId là bắt buộc)

Vì vậy, để truy vấn Tìm, bạn sẽ cần phải cung cấp ít nhất một cụm từ tìm kiếm. Câu lệnh where của bạn không được dịch sang thông số tìm kiếm trong url cuối cùng. Để thêm thông số tùy chỉnh trong Nhà cung cấp loại này, bạn hãy .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) 
+0

Tôi có thể thấy lý do. Sẽ đánh dấu câu trả lời này khi tôi về nhà để chạy nó :). deal.Title.Contains "a" - cú pháp của tôi là crap. Cảm ơn bạn rất nhiều! –

+0

Xin chào @Robert Jeppesen, tôi đã có cơ hội để thử điều này. Mã của bạn hoạt động hoàn hảo. Những gì không hoạt động là sự thích nghi của tôi đối với mã này: 'code' cho số tiêu đề EItemSearch = truy vấn { cho mục trong ebay.Items do trong đó (item.Title.Contains title) lấy số } –

+0

Cũng vậy xử lý định dạng đánh dấu mini! –

Các vấn đề liên quan