2013-01-12 16 views
6

NetflixでODataServiceタイププロバイダを使用しようとしています。これは正常に動作します:ODataServiceタイププロバイダのnullable intにHas Hasueプロパティがありません

type internal NetflixData = ODataService<"http://odata.netflix.com/Catalog/"> 
let internal NetflixContext = NetflixData.GetDataContext() 

let godzillamovies = query { for t in NetflixContext.Titles do 
          where (t.Name.Contains "Godzilla") 
          select (t.Name, t.ReleaseYear) 
          } |> Seq.toList 

が、NO放出の西暦の日付(ブーイング)とゴジラのテレビ番組のすべてのエピソードを、返します。だから、私は私のクエリを更新します。

let godzillamovies = query { for t in NetflixContext.Titles do 
          where (t.Name.Contains "Godzilla" && t.ReleaseYear.HasValue) 
          select (t.Name, t.ReleaseYear.Value) 
          } |> Seq.toList 

そして、私は次のようなエラーに直面しています:

<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?> 
<error xmlns=\"http://schemas.microsoft.com/ado/2007/08/dataservices/metadata\"> 
    <code></code> 
    <message xml:lang=\"en-US\">No property 'HasValue' exists in type 'System.Nullable`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' at position 45.</message> 
</error> 

ええと、hasValueははNULL可能int型には存在しないのですか?いつから?

答えて

6
#r "FSharp.Data.TypeProviders" 
#r "System.Data.Services.Client" 

open Microsoft.FSharp.Data.TypeProviders 
open Microsoft.FSharp.Linq.NullableOperators 

type internal NetflixData = ODataService<"http://odata.netflix.com/Catalog/"> 
let internal NetflixContext = NetflixData.GetDataContext() 

NetflixContext.DataContext.SendingRequest.Add(fun e -> printfn "%A" e.Request.RequestUri) 

// http://odata.netflix.com/Catalog/Titles()?$filter=substringof('Godzilla',Name) and (ReleaseYear ne null)&$select=Name,ReleaseYear 
let godzillamovies = query { for t in NetflixContext.Titles do 
          where (t.Name.Contains "Godzilla") 
          where (t.ReleaseYear ?<>? System.Nullable()) 
          select (t.Name, t.ReleaseYear) 
          } |> Seq.toList 
+0

私は '' が、完璧(t.Name、t.ReleaseYear.Value)を選択し、感謝の選択を切り替える必要がありました。 – rachel

関連する問題