2013-01-12 13 views
6

के लिए शून्य संपत्ति के लिए कोई संपत्ति 'HasValue' मौजूद नहीं है, मैं Netflix के साथ ODataService प्रकार प्रदाता का उपयोग करने का प्रयास कर रहा हूं। यह ठीक काम करता है:ODataService प्रकार प्रदाता

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 

लेकिन Godzilla टीवी शो के सभी एपिसोड, कोई रिहाई साल दिनांकों (बू) के साथ देता है। तो, मैं करने के लिए मेरे क्वेरी अद्यतन:

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 नल ints के लिए मौजूद नहीं है? कब से?

उत्तर

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

संबंधित मुद्दे