2008-10-10 7 views

उत्तर

134

वीबी में:

from m in MyTable 
take 10 
select m.Foo 

मतलब यह है कि MyTable लागू करता IQueryable। आपको डेटाकॉन्टेक्स्ट या किसी अन्य प्रदाता के माध्यम से इसका उपयोग करना पड़ सकता है।

यह भी मानता है कि फू माईटेबल में एक कॉलम है जो किसी संपत्ति के नाम पर मैप हो जाता है।

अधिक जानकारी के लिए http://blogs.msdn.com/vbteam/archive/2008/01/08/converting-sql-to-linq-part-7-union-top-subqueries-bill-horst.aspx देखें।

+121

कि सी # में काम नहीं करता है, वहाँ कोई ले अभिव्यक्ति है। आपको टेक() विधि का उपयोग करने की आवश्यकता है। –

+9

तकनीकी रूप से, प्रश्नकर्ता ने लिंक से एसक्यूएल के लिए पूछा, इसलिए वीबी एक व्यवहार्य धारणा है। उस ने कहा, ALassek, मैं स्वयं एक सी # लड़का हूँ और अपना जवाब पसंद करते हैं। :-) –

+3

ठीक है, आप उदाहरण सी # LINQ में लिखे गए थे, इसलिए मैंने इसे इंगित किया। –

3

आप टेक (एन) विधि का उपयोग करेंगे।

231

उपयोग Take method:

Dim foo = From t in MyTable _ 
      Take 10 _ 
      Select t.Foo 

प्रलेखन से::

var foo = (from t in MyTable 
      select t.Foo).Take(10); 

वीबी LINQ में एक ले अभिव्यक्ति है

Take<TSource> विश्लेषण करता source और तत्वों पैदावार तक count तत्व पैदा किया गया है या source सी कोई और तत्व नहीं है। यदि countsource में तत्वों की संख्या से अधिक है, तो source के सभी तत्व लौटा दिए गए हैं।

+12

सी # और वीबी के बीच LINQ में छोटे अंतर परेशान हैं। सी # में वीबी की तरह अभिव्यक्ति क्यों नहीं है? यह एक निरीक्षण की तरह लगता है। और वीबी की अज्ञात सब्सक्रिप्शन की कमी लैम्ब्डा को बहुत कम उपयोगी बनाती है। –

+0

बस जो मैं +1 – jasonco

+1

+1 के लिए देख रहा था बस मुझे जो भी चाहिए था। और एफडब्ल्यूआईडब्ल्यू, ऐसा लगता है कि केवल दस रिकॉर्ड ही पाइप नीचे आते हैं। मेरा चयन अन्यथा एक दर्दनाक देरी के बाद * आउटऑफमेमरी अपवाद * फेंकने के लिए पर्याप्त डेटा की एक बड़ी मात्रा में डेटा लौटाएगा। टेक (_manageable-quantity_) के साथ, कोई देरी नहीं, कोई अपवाद नहीं है। –

32

Take(int n) विधि का उपयोग करें:

var q = query.Take(10); 
4

यह सी # में अच्छी तरह से काम

var q = from m in MyTable.Take(10) 
     select m.Foo 
4

मैं इस तरह कार्य करें:

var dados = from d in dc.tbl_News.Take(4) 
       orderby d.idNews descending 

       select new 
       { 
        d.idNews, 
        d.titleNews, 
        d.textNews, 
        d.dateNews, 
        d.imgNewsThumb 
       }; 
+5

इस दृष्टिकोण के साथ समस्या यह है कि आप 4 ले लेंगे और फिर उन्हें आदेश देंगे, जब मुझे संदेह है कि आप वास्तव में क्या चाहते हैं शीर्ष 4 परिणाम प्राप्त करना है। ऑर्डरबाय के बाद आपको लेने की ज़रूरत है, यान टिप्पणी देखें। –

1

छँटाई है बिना डेटाबेस का डेटा ले रहा है यादृच्छिक रूप से

13

@Janei: मेरी पहली टिप्पणी यहाँ अपने नमूना के बारे में है;)

मुझे लगता है कि अगर आप इस तरह करते हैं, आप 4 लेने के लिए है, तो इन 4.

var dados = from d in dc.tbl_News.Take(4) 
       orderby d.idNews descending 
       select new 
       { 
        d.idNews, 
        d.titleNews, 
        d.textNews, 
        d.dateNews, 
        d.imgNewsThumb 
       }; 

पर तरह लागू करना चाहते उतरते idNews द्वारा पूरे tbl_News छँटाई और फिर लेने की तुलना में अलग 4

var dados = (from d in dc.tbl_News 
       orderby d.idNews descending 
       select new 
       { 
        d.idNews, 
        d.titleNews, 
        d.textNews, 
        d.dateNews, 
        d.imgNewsThumb 
       }).Take(4); 

नहीं? परिणाम अलग हो सकते हैं।

2

चाहे ग्राहक पर या डीबी में क्या होता है, इस पर निर्भर करता है कि आप लेक ऑपरेटर कहां लागू करते हैं। यदि आप क्वेरी की गणना करने से पहले इसे लागू करते हैं (यानी।इससे पहले कि आप इसे किसी फोरच में इस्तेमाल करें या उसे संग्रह में परिवर्तित करें) ले लेना परिणामस्वरूप "शीर्ष एन" एसक्यूएल ऑपरेटर डीबी को भेजा जा रहा है। यदि आप SQL प्रोफाइलर चलाते हैं तो आप इसे देख सकते हैं। आप क्वेरी की गणना के बाद ले लागू होते हैं यह, ग्राहक पर क्या होगा के रूप में LINQ आप के माध्यम से यह

2
Array oList = ((from m in dc.Reviews 
          join n in dc.Users on m.authorID equals n.userID 
          orderby m.createdDate descending 
          where m.foodID == _id      
          select new 
          { 
           authorID = m.authorID, 
           createdDate = m.createdDate, 
           review = m.review1, 
           author = n.username, 
           profileImgUrl = n.profileImgUrl 
          }).Take(2)).ToArray(); 
0

मैं टेक (एन) विधि का उपयोग करने के लिए किया था की गणना करने के लिए डेटाबेस से डेटा पुनः प्राप्त करने के लिए किया है , फिर सूची में परिवर्तित करें, एक आकर्षण की तरह काम किया:

var listTest = (from x in table1 
        join y in table2 
        on x.field1 equals y.field1 
        orderby x.id descending 
        select new tempList() 
        { 
         field1 = y.field1, 
         active = x.active 
        }).Take(10).ToList(); 
10

ओपी वास्तव में ऑफसेट का भी उल्लेख करता है, इसलिए पूर्व के लिए। यदि आप 30 से 60 तक आइटम प्राप्त करना चाहते हैं, तो आप करेंगे:

var foo = (From t In MyTable 
     Select t.Foo).Skip(30).Take(30); 

ऑफसेट के लिए "छोड़ें" विधि का उपयोग करें।
सीमा के लिए "टेक" विधि का उपयोग करें।

0

इस तरह यह मेरे लिए काम किया:

var noticias = from n in db.Noticias.Take(6) 
         where n.Atv == 1 
         orderby n.DatHorLan descending 
         select n; 
+0

मैंने अभी आपकी पोस्ट संपादित की है, मैंने पुर्तगाली पाठ को अंग्रेजी में अनुवादित किया है, क्योंकि यह साइट केवल अंग्रेज़ी भाषा है (वेरिएबल नामों पर लागू नहीं होती है, इसलिए मैंने उनको नहीं बदला है)। – waka

+0

क्षमा करें! मुझे एहसास नहीं हुआ, मैंने सोचा कि मैं ब्राजील के स्टैक ओवरफ्लो में था। माफ़ कीजिये – Gladson

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