2010-05-13 7 views
6

सिल्वरलाइट 4 में Netflix oData सेवा से गणना क्वेरी का अनुरोध करने के लिए LINQ अभिव्यक्ति का उपयोग करने का कोई तरीका है?नेटफ्लिक्स ओडाटा सेवा से वापसी की गणना जब LINQ गणना() विधि

The Netflix documentation shows that you can return counts by appending $count to a request for a collection, लेकिन इस तरह का URL:

http://netflix.cloudapp.net/Catalog/Genres/$count 

इस तरह एक अभिव्यक्ति से उत्पन्न नहीं है:

var count = (from g in catalog.Genres select g).Count(); 

ऊपर कोड कह रही है कि गणना विधि समर्थित नहीं है एक त्रुटि देता है। क्या LINQ में ऐसा करने का कोई तरीका है, या क्या मुझे मूल्य प्राप्त करने के लिए वेब क्लाइंट अनुरोध करने की आवश्यकता है?

+0

BTW अपने पॉडकास्ट –

उत्तर

1

यह LINQPad 4 में काम करता है सी # 3.0 त्रुटि दिखाई देती का उपयोग कर सी # 4,0

var count = (from g in Genres select g).Count(); 
count.Dump(); 

Result: 518 

LINQPad 2 में इस्तेमाल करते हैं।

+0

मैं मूल पोस्ट अद्यतन प्यार करता हूँ, लेकिन मुझे लगता है कि मैं सिल्वरलाइट 4. यह इस दृष्टिकोण प्रकट होता है में यह कर रहा हूं उल्लेख करना भूल गया, एक DataServiceCollection के खिलाफ जा रहा सिल्वरलाइट में समर्थित नहीं है । –

+0

धन्यवाद! - पॉडकास्ट के बारे में :) –

+0

http://odata.codeplex.com पर स्रोत ब्राउज़ करना ऐसा लगता है कि इसे समर्थन देना चाहिए। गणना() –

5

गिनती और LongCount Silverligth में समर्थित नहीं हैं क्योंकि उन्हें क्वेरी के एक समेकित निष्पादन की आवश्यकता होती है। चूंकि सिल्वरलाइट को सभी नेटवर्क ऑपरेशंस को एसिंक्रोनस द्वारा आवश्यकता होती है, इसलिए यह संभव नहीं है।

आप या तो के बाद से $ गिनती संख्या का एक पाठ प्रतिनिधित्व देता है, जवाब पार्स नहीं कि कठिन है, सवाल में HTTP क्वेरी प्रोग्राम के DataServiceContext (या संबंधित वर्ग) का उपयोग नहीं जारी कर सकते हैं।

या आप एक चाल का थोड़ा सा उपयोग कर सकते हैं। आप क्वेरी में $ inlinecount = allpages क्वेरी विकल्प जोड़ने के लिए IncludeTotalCount() का उपयोग कर सकते हैं जिसमें प्रतिक्रिया में गिनती शामिल होगी। फिर सर्वर से सभी इकाइयों को डाउनलोड न करने के लिए, आप टेक (0) का उपयोग कर सकते हैं जो $ top = 0 जोड़ देगा और इस प्रकार खाली परिणाम सेट वापस कर देगा। लेकिन इनलाइन गिनती में अभी भी सही संख्या होगी।

आप QueryOperationResponse TotalCount प्रॉपर्टी पर इनलाइन गणना तक पहुंच सकते हैं। कुछ इस तरह:

NetflixCatalog ctx = new NetflixCatalog(new Uri("http://netflix.cloudapp.net/Catalog")); 
var q = (DataServiceQuery<Genre>)ctx.Genres.IncludeTotalCount().Take(0); 
q.BeginExecute((ar) => 
    { 
     QueryOperationResponse<Genre> r = (QueryOperationResponse<Genre>)q.EndExecute(ar); 
     r.TotalCount.ToString(); // Use the count in whatever way you need 
    }, null); 
संबंधित मुद्दे