2012-06-08 16 views
8

मैं एएसपी.NET एप्लिकेशन पर काम कर रहा हूं और मैं एक LINQ क्वेरी बना रहा हूं जो डीबी से पेजिनेटेड रिकॉर्ड का चयन करेगा। उपयोगकर्ता इंटरफ़ेस पर मेरे पास एक सूची बॉक्स है जहां उपयोगकर्ता एकाधिक विकल्पों का चयन कर सकता है। मैं जानना चाहता हूं:इकाइयों से लिंक छोड़ें() और टेक()

  • मैं अगले परिणामों को देखने के लिए छोड़ें(), टेक() पैरामीटर कैसे बढ़ा सकता हूं?

  • मैं "इन" कुंजी शब्द का उपयोग कैसे कर सकता हूं ताकि यदि उपयोगकर्ता सूचीबॉक्स से कई विकल्प चुनता है, तो क्वेरी सभी मानों की जांच कर सकती है?

मेरे क्वेरी इस तरह दिखता है:

var searchResults = context.data_vault.Where(d => d.STATE == lstStates.SelectedItem.Text).OrderBy(d= > d.dv_id).Take(10).Skip(2);  
GridView1.DataSource = searchResults; 
GridView1.DataBind(); 
+0

आप छोड़ सकते हैं और तब ले पहली कॉल की जरूरत है। आपके वर्तमान कार्यान्वयन में आप हमेशा 3 से 10 आइटम पुनर्प्राप्त करेंगे, क्योंकि आप पहले 10 लेते हैं और उन लोगों से जिन्हें आप पहले दो छोड़ते हैं। वृद्धि करने के लिए आपको केवल अपनी विधि के पैरामीटर के रूप में छोड़ने के लिए मूल्य की आपूर्ति करने की आवश्यकता है जहां क्वेरी निष्पादित की जाती है। – Franky

उत्तर

7

आप GridView पर पेजिंग चालू करने के लिए पहली जरूरत है। तब PageIndexChanging घटना पर:

var result = db.Where(...) 
       .Skip(e.NewPageIndex * grid.PageSize) 
       .Take(grid.PageSize) 
       .ToList(); // this is very important part too 

IN व्यवहार का अनुकरण करने के लिए:

var selection = list.SelectedItems.Select(i => i.Text).ToArray(); 
var result = db.Where(x => selection.Contains(x.Prop)); 
+1

दूसरी क्वेरी में समापन ब्रैकेट जोड़ें। 'डीबी। जहां (x => चयन। कंटेनर (x.Prop));' –

+0

@ निखिल अग्रवाल: धन्यवाद। – abatishchev

+2

क्या डाउनवॉटर पर टिप्पणी करने की परवाह है? – abatishchev

19

मुझे लगता है कि आप गलत तरीके से जाएं उपयोग कर रहे हैं। यह लेने से पहले होना चाहिए।

छोड़ें कई रिकॉर्ड्स छोड़ें, इसलिए अपने पहले पृष्ठ के लिए, 0 में पास करें, और प्रति पृष्ठ (पृष्ठ संख्या -1) * रिकॉर्ड में पास करें।

मैं आमतौर पर कुछ इस तरह करते हैं:

int Page = 1; 
int RecordsPerPage = 10; 
var q = yourQuery.Skip((Page - 1) * RecordsPerPage).Take(RecordsPerPage); 
1

इस प्रयास करें:

int temp = (CurrentPageNumber - 1) * 10; 
    var searchResults = context.data_vault.Where(d => d.STATE == lstStates.SelectedItem.Text).OrderBy(d= > d.dv_id).Skip(temp).Take(10); 
संबंधित मुद्दे