मैं इसशीर्ष या LIMIT/OFFSET के बराबर SQL से लिंक क्या है?
Select top 10 Foo from MyTable
Linq में एसक्यूएल करने के लिए करते हैं?
मैं इसशीर्ष या LIMIT/OFFSET के बराबर SQL से लिंक क्या है?
Select top 10 Foo from MyTable
Linq में एसक्यूएल करने के लिए करते हैं?
वीबी में:
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 देखें।
आप टेक (एन) विधि का उपयोग करेंगे।
उपयोग 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
सी कोई और तत्व नहीं है। यदिcount
source
में तत्वों की संख्या से अधिक है, तोsource
के सभी तत्व लौटा दिए गए हैं।
सी # और वीबी के बीच LINQ में छोटे अंतर परेशान हैं। सी # में वीबी की तरह अभिव्यक्ति क्यों नहीं है? यह एक निरीक्षण की तरह लगता है। और वीबी की अज्ञात सब्सक्रिप्शन की कमी लैम्ब्डा को बहुत कम उपयोगी बनाती है। –
बस जो मैं +1 – jasonco
+1 के लिए देख रहा था बस मुझे जो भी चाहिए था। और एफडब्ल्यूआईडब्ल्यू, ऐसा लगता है कि केवल दस रिकॉर्ड ही पाइप नीचे आते हैं। मेरा चयन अन्यथा एक दर्दनाक देरी के बाद * आउटऑफमेमरी अपवाद * फेंकने के लिए पर्याप्त डेटा की एक बड़ी मात्रा में डेटा लौटाएगा। टेक (_manageable-quantity_) के साथ, कोई देरी नहीं, कोई अपवाद नहीं है। –
Take(int n)
विधि का उपयोग करें:
var q = query.Take(10);
यह सी # में अच्छी तरह से काम
var q = from m in MyTable.Take(10)
select m.Foo
मैं इस तरह कार्य करें:
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
};
इस दृष्टिकोण के साथ समस्या यह है कि आप 4 ले लेंगे और फिर उन्हें आदेश देंगे, जब मुझे संदेह है कि आप वास्तव में क्या चाहते हैं शीर्ष 4 परिणाम प्राप्त करना है। ऑर्डरबाय के बाद आपको लेने की ज़रूरत है, यान टिप्पणी देखें। –
छँटाई है बिना डेटाबेस का डेटा ले रहा है यादृच्छिक रूप से
@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);
नहीं? परिणाम अलग हो सकते हैं।
चाहे ग्राहक पर या डीबी में क्या होता है, इस पर निर्भर करता है कि आप लेक ऑपरेटर कहां लागू करते हैं। यदि आप क्वेरी की गणना करने से पहले इसे लागू करते हैं (यानी।इससे पहले कि आप इसे किसी फोरच में इस्तेमाल करें या उसे संग्रह में परिवर्तित करें) ले लेना परिणामस्वरूप "शीर्ष एन" एसक्यूएल ऑपरेटर डीबी को भेजा जा रहा है। यदि आप SQL प्रोफाइलर चलाते हैं तो आप इसे देख सकते हैं। आप क्वेरी की गणना के बाद ले लागू होते हैं यह, ग्राहक पर क्या होगा के रूप में LINQ आप के माध्यम से यह
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();
मैं टेक (एन) विधि का उपयोग करने के लिए किया था की गणना करने के लिए डेटाबेस से डेटा पुनः प्राप्त करने के लिए किया है , फिर सूची में परिवर्तित करें, एक आकर्षण की तरह काम किया:
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();
ओपी वास्तव में ऑफसेट का भी उल्लेख करता है, इसलिए पूर्व के लिए। यदि आप 30 से 60 तक आइटम प्राप्त करना चाहते हैं, तो आप करेंगे:
var foo = (From t In MyTable
Select t.Foo).Skip(30).Take(30);
ऑफसेट के लिए "छोड़ें" विधि का उपयोग करें।
सीमा के लिए "टेक" विधि का उपयोग करें।
इस तरह यह मेरे लिए काम किया:
var noticias = from n in db.Noticias.Take(6)
where n.Atv == 1
orderby n.DatHorLan descending
select n;
मैंने अभी आपकी पोस्ट संपादित की है, मैंने पुर्तगाली पाठ को अंग्रेजी में अनुवादित किया है, क्योंकि यह साइट केवल अंग्रेज़ी भाषा है (वेरिएबल नामों पर लागू नहीं होती है, इसलिए मैंने उनको नहीं बदला है)। – waka
क्षमा करें! मुझे एहसास नहीं हुआ, मैंने सोचा कि मैं ब्राजील के स्टैक ओवरफ्लो में था। माफ़ कीजिये – Gladson
कि सी # में काम नहीं करता है, वहाँ कोई ले अभिव्यक्ति है। आपको टेक() विधि का उपयोग करने की आवश्यकता है। –
तकनीकी रूप से, प्रश्नकर्ता ने लिंक से एसक्यूएल के लिए पूछा, इसलिए वीबी एक व्यवहार्य धारणा है। उस ने कहा, ALassek, मैं स्वयं एक सी # लड़का हूँ और अपना जवाब पसंद करते हैं। :-) –
ठीक है, आप उदाहरण सी # LINQ में लिखे गए थे, इसलिए मैंने इसे इंगित किया। –