2013-07-25 8 views
5

मैं कोड के इस खंड के साथ मैं काम कर रहा हूँ है:सूची आइटम (LINQ) के विशिष्ट श्रेणी प्राप्त

// get the collection of librarys from the injected repository 
librarySearchResults = _librarySearchRepository.GetLibraries(searchTerm); 

// map the collection into a collection of LibrarySearchResultsViewModel view models 
libraryModel.LibrarySearchResults = 
    librarySearchResults.Select(
     library => 
     new LibrarySearchResultsViewModel 
     { 
      Name = library.Name, 
      Consortium = library.Consortium, 
      Distance = library.Distance, 
      NavigateUrl = _librarySearchRepository.GetUrlFromBranchId(library.BranchID), 
      BranchID = library.BranchID 
     }).ToList(); 

सभी इस, GetLibraries(searchTerm), जो LibrarySearchResult वस्तुओं की एक सूची रिटर्न के परिणामों ले करता है और उन्हें LibrarySearchResultsViewModel की सूची में मानचित्रित करता है।

हालांकि यह 1000 परिणाम में आने के बाद छोटे परिणाम सेट के लिए अच्छा काम करता है, यह वास्तव में रूपांतरण को समाप्त करने से पहले लगभग 12 सेकंड लगने लगते हैं।

मेरा प्रश्न:

के बाद से मैं यहाँ पेजिंग उपयोग कर रहा हूँ, मैं सच में केवल डेटा है कि एक बड़ी परिणाम सेट में लौटे किया जा रहा है का एक अंश प्रदर्शित करने के लिए की जरूरत है। क्या Take() या GetRange() जैसे कुछ का उपयोग करने का कोई तरीका है, ताकि रूपांतरण केवल उन रिकॉर्ड के लिए होता है जिन्हें मुझे प्रदर्शित करने की आवश्यकता है? 1,000 रिकॉर्ड में से कहें, मैं केवल 20 से 40 रिकॉर्ड प्राप्त करना चाहता हूं, और उन्हें दृश्य मॉडल में बदलना चाहता हूं।

मैं इस कोड को बेहतर बनाने या पुन: सक्रिय करने के लिए भी सभी सुझावों के लिए हूं।

+1

कृपया हस्ताक्षर के संबंध में अक्सर पूछे जाने वाले प्रश्न देखें। http://stackoverflow.com/help/behavior विशिष्ट रूप से 'हस्ताक्षर, टैगलाइन, या बधाई का उपयोग न करें। आपके द्वारा बनाए गए प्रत्येक पोस्ट को आपके मानक उपयोगकर्ता कार्ड से पहले ही "हस्ताक्षरित" किया गया है, जो सीधे आपके उपयोगकर्ता पृष्ठ पर लिंक करता है। यदि आप अतिरिक्त हस्ताक्षर या टैगलाइन का उपयोग करते हैं, तो इसे प्रश्नों और उत्तरों में शोर को कम करने के लिए हटा दिया जाएगा। – cadrell0

+0

सहायता के लिए खुशी हुई। यह सुनिश्चित करने के लिए कि आप समुदाय दिशानिर्देशों का पालन करें, मैं आपको पूरी तरह से एफएक्यू को पढ़ने की सलाह दूंगा। मैं अधिक जानकारी के लिए मेटा पर इस पोस्ट की भी सिफारिश करता हूं। http://meta.stackexchange.com/questions/7931/faq-for-stack-exchange-sites – cadrell0

उत्तर

21

उपयोग Skip और Take:

// take records from 20 to 40 
var records = librarySearchResults.Skip(20).Take(20); 

आप आसानी से यह पृष्ठ पर अंक लगाना कर सकते हैं (आप page और pageSize करना होगा)।

दूसरी ओर तुम वहाँ ToList उपयोग कर रहे हैं पर, का उपयोग कर बसIEnumerable, सूची में रूपांतरण बहुत समय तक खा सकते हैं, विशेष रूप से बड़े डेटा सेट के लिए विचार करें।

7

आप पेजिंग सक्षम करने के लिए Skip() और Take() का उपयोग कर सकते हैं।

var idx = // set this based on which page you're currently generating 
librarySearchResults.Skip(idx * numitems).Take(numitems).Select(lib => ...); 
+0

+1 आईडीएक्स/पेज नंबर – cadrell0

+0

सहित वॉकहार्ड जल्द ही एक मिनट था, लेकिन यह भी बहुत अच्छा काम करता है। +1 – X3074861X

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