শীর্ষস্থানীয় বা লিমিট / অফসেটের সমতুল্য লিনক কী?


উত্তর:


146

ভিবিতে:

from m in MyTable
take 10
select m.Foo

এটি ধরে নিয়েছে যে MyTable আইকোয়ারিযোগ্য প্রয়োগ করে। আপনাকে ডেটা কনটেক্সট বা অন্য কোনও সরবরাহকারীর মাধ্যমে অ্যাক্সেস করতে হতে পারে।

এটিও ধরে নিয়েছে যে ফু মাই টেবিলের একটি কলাম যা কোনও সম্পত্তির নামের সাথে ম্যাপ করা হয়।

আরও তথ্যের জন্য http://blogs.msdn.com/vbteam/archive/2008/01/08/converting-sql-to-linq-part-7-union-top-subqueries-bill-horst.aspx দেখুন ।


127
এটি সি # তে কাজ করে না, কোনও গ্রহণের মত প্রকাশ নেই। আপনার টেক () পদ্ধতিটি ব্যবহার করা দরকার।
আদম লাসেক

10
প্রযুক্তিগতভাবে, প্রশ্নকর্তা লিনককে এসকিউএল করার অনুরোধ করেছিলেন, সুতরাং ভিবি একটি কার্যকর অনুমান able এটি বলেছে, আলাসেক, আমি নিজেই # লোক এবং আপনার উত্তর পছন্দ করি। :-)
ডেভিড আল্পার্ট

3
ঠিক আছে, আপনার উদাহরণটি সি # লিনকুতে লেখা হয়েছিল যার কারণে আমি এটি উল্লেখ করেছি।
আদম লাসেক

3
2 সমস্যা: 1) এটি ভিবিতে সূক্ষ্মভাবে কাজ করে। সি # তে আপনার গ্রহণ পদ্ধতি আছে। 2) টেক ক্লায়েন্টে কাজ করে, ডিবিতে নয়, সুতরাং আপনার যদি বড় ফলাফলের সেট থাকে তবে আপনি ডিবি থেকে ক্লায়েন্টের কাছে এটির সব শেষ করে দেবেন!
ইউকি

8
এটি কয়েক বছরের পুরনো প্রশংসা করুন, তবে যারা এখানে আসছেন তাদের পক্ষে এটি লক্ষণীয় যে ".টাকে (এক্স)" আপনাকে একটি করার আগে উপস্থিত হওয়া উচিত "নির্বাচন করুন ()" বা "। টোললিস্ট ()" হিসাবে " .টাক (এক্স) "কেবলমাত্র উত্পাদিত এসকিউএল অন্তর্ভুক্ত করা হবে যদি এটি ফলাফলগুলি গণনার আগে হয়। যদি এটির পরে প্রদর্শিত হয়, তবে ফলাফল সেটটি গণনা করা হয়ে গেলে এটি করা হবে এবং তাই এটি একটি পুরানো লিনক বিবৃতি!
বার্টি

248

টেক পদ্ধতিটি ব্যবহার করুন :

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

ভিবি লিনকিউতে একটি গ্রহণের মত প্রকাশ রয়েছে:

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

ডকুমেন্টেশন থেকে:

Take<TSource>sourceউপাদানগুলি ফলন না countকরা বা sourceকোনও উপাদান না থাকা পর্যন্ত উপাদানগুলি গণনা করে এবং ফল দেয় । যদি countউপাদানগুলির সংখ্যা ছাড়িয়ে যায় তবে sourceসমস্ত উপাদানগুলি sourceফিরে আসে।


13
সি # এবং ভিবি-র মধ্যে লিনিকের সামান্য পার্থক্য বিরক্তিকর। কেন সি # এর ভিবি-র মতো টেক এক্সপ্রেশন নেই? এটি একটি তদারকির মতো বলে মনে হচ্ছে। এবং ভিবি'র অজ্ঞাতনামা সাব এর অভাব ল্যাম্বডাসকে অনেক কম দরকারী করে তোলে।
আদম লাসেক

আমি কী +1
করছিলাম

1
+1 ঠিক আমারও যা প্রয়োজন ছিল। এবং এফডাব্লুআইডাব্লু, মনে হয় যে কেবল দশটি রেকর্ডই পাইপ থেকে নেমে এসেছে। আমার নির্বাচন অন্যথায় প্রচুর পরিমাণে ডেটা ফেরত দেবে , একটি বেদনাদায়ক বিলম্বের পরে একটি আউটআফমিউরি এক্সেকশন ফেলে দেওয়ার জন্য যথেষ্ট enough টেক ( পরিচালনাযোগ্য-পরিমাণ ) সহ, কোনও বিলম্ব নেই, কোনও ব্যতিক্রম নেই।
বব কাউফম্যান

ভিবি-তে এখন একটি টেক () পদ্ধতিও রয়েছে। পরিমাণ নেওয়ার জন্য আমাকে একটি ভেরিয়েবল ব্যবহার করতে হয়েছিল, এবং পদ্ধতিটি করার সময় অভিব্যক্তিটি কার্যকর হয়নি।
ডেভ জনসন

33

Take(int n)পদ্ধতিটি ব্যবহার করুন :

var q = query.Take(10);

24

ওপি প্রকৃতপক্ষে অফসেটেরও উল্লেখ করেছে, তাই প্রাক্তন হিসাবে for আপনি যদি 30 থেকে 60 টি পর্যন্ত আইটেমগুলি পেতে চান তবে আপনি এটি করবেন:

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

অফসেটের জন্য "এড়িয়ে যান" পদ্ধতিটি ব্যবহার করুন।
সীমাবদ্ধতার জন্য "নিন" পদ্ধতিটি ব্যবহার করুন।


13

@ জেনি: এখানে আমার প্রথম মন্তব্যটি আপনার নমুনা সম্পর্কে;)

আমি মনে করি আপনি যদি এটি করেন তবে আপনি 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
                };

পুরো টিবিএল_নিউজকে আইডিনিউজকে সাজানো এবং তারপরে 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);

না? ফলাফলগুলি ভিন্ন হতে পারে।


5

এটি সি # তে ভাল কাজ করে

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
                };

7
এই পদ্ধতির সাথে সমস্যাটি হ'ল আপনি 4 নেবেন এবং তারপরে তাদের অর্ডার করুন, যখন আমি সন্দেহ করি যে আপনি কী চান তা শীর্ষ 4 ফলাফল অর্জন করা। অর্ডারবাইয়ের পরে আপনাকে তা করা দরকার, ইয়ানসের মন্তব্য দেখুন।
রাসেল ট্রয়ওয়েস্ট

3

আপনি টেক (এন) পদ্ধতিটি ব্যবহার করবেন।


3

গ্রহণটি ক্লায়েন্টের উপর বা ডিবিতে ঘটে কিনা আপনি কোথায় টেক অপারেটর প্রয়োগ করবেন তার উপর নির্ভর করে। আপনি যদি ক্যোয়ারীটি গণনার আগে এটি প্রয়োগ করেন (যেমন আপনি এটি পূর্বাঞ্চে ব্যবহার করার আগে বা এটি কোনও সংগ্রহে রূপান্তরিত করার আগে) নেওয়ার ফলে "শীর্ষ এন" এসকিউএল অপারেটরকে ডিবিতে প্রেরণ করা হবে। আপনি যদি এসকিউএল প্রোফাইলার চালনা করেন তবে এটি দেখতে পাবেন। আপনি যদি ক্যোয়ারী গণনা করার পরে গ্রহণটি প্রয়োগ করেন তবে তা ক্লায়েন্টের উপরেই ঘটবে, কারণ এটির মাধ্যমে গণনা করার জন্য লিনকিউ আপনাকে ডাটাবেস থেকে ডেটা উদ্ধার করতে হবে


2

বাছাই ছাড়াই ডেটাবেসের ডেটা নেওয়া এলোমেলো টেকের মতো


এটি অবশ্যই এলোমেলো নয়, যদিও ফলাফলগুলি পুনরাবৃত্তিযোগ্য হওয়ার গ্যারান্টিযুক্ত নয়, তবে আপনি এটি করতে চান এমন প্রচুর সময় রয়েছে, বিশেষত পরীক্ষায়।
অস্পেক্স

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();

0

এইভাবে এটি আমার পক্ষে কাজ করেছে:

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

আমি কেবল আপনার পোস্টটি সম্পাদনা করেছি, পর্তুগিজ পাঠগুলি ইংরেজিতে অনুবাদ করেছি, কারণ এই সাইটটি কেবল ইংরেজী ভাষা (ভেরিয়েবল নামের ক্ষেত্রে প্রযোজ্য নয়, এজন্য আমি সেগুলি পরিবর্তন করি নি)।
waka

দুঃখিত! আমি বুঝতে পারি নি, আমি ভেবেছিলাম আমি ব্রাজিলিয়ান স্ট্যাকওভারফ্লোতে আছি। দুঃখিত
গ্লাদসন রিস

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.