লিনকিউ, কোথায় () বনাম ফাইন্ডএল ()


125

লিনকিউ কোথায় (..) এবং ফাইন্ডএল (..) পার্থক্য করে কীভাবে কেউ ব্যাখ্যা করতে পারে? তারা দু'জনেই একই কাজ করছে বলে মনে হচ্ছে ...



উত্তর:


202

FindAll()এই List<T>ধরণের একটি ফাংশন , এটি কোনও লিনকিউ এক্সটেনশন পদ্ধতির মতো নয় Where। লিনকিউ এক্সটেনশন পদ্ধতিগুলি যে কোনও প্রকার প্রয়োগকারী ক্ষেত্রে কাজ করে IEnumerable, যেখানে FindAllকেবলমাত্র List<T>উদাহরণগুলি ব্যবহার করা যেতে পারে (বা এটির উত্তরাধিকারী শ্রেণীর উদাহরণগুলি অবশ্যই)।

অতিরিক্তভাবে, এগুলি প্রকৃত উদ্দেশ্যে পৃথক। যখন বস্তুটি গণনা করা হয় অন-চাহিদা অনুসারে সম্পাদিত হয় Whereতার একটি উদাহরণ দেয় IEnumerableFindAllList<T>অনুরোধকৃত উপাদানগুলি সহ একটি নতুন ফিরিয়ে দেয় । FindAllআরও Where(...).ToList()একটি উদাহরণ কল করার মত IEnumerable


20
হ্যাঁ, ফাইন্ডলটির একটি অলস সংস্করণটি কোথায়
পিয়ারটেন

2
কোড.msdn.microsoft.com/LINQ-Query- এক্সিকিউশন-ce0d3b95 অলস (বিলম্বিত) এবং তাত্ক্ষণিক মৃত্যুদন্ড কার্যকর করার মধ্যে পার্থক্য ব্যাখ্যা করে। মূলত, কিছু ক্ষেত্রে, আপনার পুরো তালিকার প্রয়োজন নেই, আপনি কিছু না হওয়া পর্যন্ত আইটেমগুলি লুপ করতে চান, তারপরে থামুন। এখানেই অলস কাজে আসে, কিন্তু বাস্তবায়নের উপর নির্ভর করে অনাকাঙ্ক্ষিত ফলাফল হতে পারে (সমস্ত লিঙ্কে ব্যাখ্যা করা হয়েছে)। আশাকরি এটা সাহায্য করবে.
নুরচি

10

আমার কাছে সবচেয়ে বড় পার্থক্য হ'ল .ফিনডলও .Net 2.0 এ উপলব্ধ। নেট নেট in.৫ এ প্রোগ্রাম করার মতো বিলাসিতা আমার কাছে সবসময় নেই, তাই আমি নেট জেনেরিক সংগ্রহের 'নেটিভ' পদ্ধতিগুলি মনে করার চেষ্টা করি।

এটি বেশ কয়েকবার ঘটেছিল যে আমি ইতিমধ্যে উপলব্ধ তালিকা পদ্ধতিটি নিজে প্রয়োগ করেছি কারণ আমি এটি লিনকিউ করতে পারি না।

এই ক্ষেত্রে আমি যেটি কাজে পেলাম তা হ'ল ভিএস ২০০৮ ব্যবহার করে, আমি টাইপ ইনফারেন্স এবং ল্যাম্বদা সিনট্যাক্স ব্যবহার করতে পারি । এগুলি সংকলক বৈশিষ্ট্য, ফ্রেমওয়ার্ক বৈশিষ্ট্য নয়। এর অর্থ আমি এটি লিখতে পারি এবং এখনও। নেট 2.0: এর মধ্যে থাকতে পারি

var myOddNums = myNums.FindAll(n => n%2==1);

তবে আপনার কাছে যদি লিনকিউ উপলব্ধ থাকে তবে মুলতুবি কার্যকরকরণ এবং তাত্ক্ষণিক মৃত্যুদন্ড কার্যকর করার মধ্যে পার্থক্য রাখা গুরুত্বপূর্ণ।


6

যদি আমি সঠিকভাবে স্মরণ করি তবে মূল পার্থক্যটি (তারা এর উপরে প্রয়োগ করা ছাড়াও: IEnumerable<T>বনাম List<T>) হ'ল Whereস্থগিত কার্যকরকরণ কার্যকর করে, যেখানে এটি আপনার প্রয়োজন হওয়া অবধি প্রকৃতপক্ষে অনুসন্ধানটি করে না - উদাহরণস্বরূপ ফরচ লুপে এটি ব্যবহার করে। FindAllতাৎক্ষণিকভাবে কার্যকর করার পদ্ধতি।


3

আমি 80K অবজেক্টের একটি তালিকায় কিছু পরীক্ষার করেনি এবং দেখা গেছে যে Find()দ্রুত একটি ব্যবহার 1000% পর্যন্ত হতে পারে Whereসঙ্গে FirstOrDefault()। আমি জানি না যে প্রতিটি কলের আগে এবং পরে টাইমার পরীক্ষা করা পর্যন্ত। কখনও কখনও এটি একই সময় ছিল, অন্যান্য সময় এটি দ্রুত ছিল।


5
আপনি কি সংগ্রহটি অ্যাক্সেস করার চেষ্টা করেছেন? অনুমানযোগ্য.এখানে () স্থগিতাদেশ কার্যকর করা ব্যবহার করে এবং সংগ্রহটি অ্যাক্সেস করার আগে মূল্যায়ন করা হয় না, যা এটির দ্রুত বা না হওয়া সম্পর্কে ভ্রান্ত ধারণা তৈরি করতে পারে। তবুও, এটি বেশিরভাগ অংশের জন্য, স্থির সংগ্রহগুলির চেয়ে সাধারণত গণনার ব্যবহারের জন্য দ্রুত (যেমন <T> এবং অ্যারে <T> টাইপ করুন)।
সেবাস্তিয়ান জব বিজ্জার্নার জেনসেন

প্রশ্ন ফাইন্ডএল সম্পর্কে। স্পষ্টতই সন্ধান করুন কোথায় (সমস্ত মান গ্রহণ করা) এবং ফার্স্টআরডিফল্ট পাওয়ার চেয়ে দ্রুত হবে
বিবেক এমভিকে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.