টললআপ এবং গ্রুপবি আলাদা কেন?


111

.ToLookup<TSource, TKey>ফেরত একটি ILookup<TKey, TSource>ILookup<TKey, TSource>ইন্টারফেস প্রয়োগ করে IEnumerable<IGrouping<TKey, TSource>>

.GroupBy<TSource, TKey>ফেরত একটি IEnumerable<IGrouping<Tkey, TSource>>

আইলুকআপের হ্যান্ডি ইনডেক্সার বৈশিষ্ট্য রয়েছে, সুতরাং এটি অভিধান-এর মতো (বা লুকোচুরি-জাতীয়) পদ্ধতিতে ব্যবহার করা যেতে পারে, যেখানে গ্রুপবাই পারে না। সূচক ছাড়াই গ্রুপপাইয়ের সাথে কাজ করার ব্যথা; তারপরে রিটার্ন অবজেক্টটি উল্লেখ করার একমাত্র উপায় হ'ল লুপিং (বা অন্য লিনকিউ-এক্সটেনশন পদ্ধতি ব্যবহার করে)। অন্য কথায়, গ্রুপবি যে কোনও ক্ষেত্রে কাজ করে, টু লকআপও কাজ করবে।

এই সব আমাকে এই প্রশ্নে ফেলে দিয়েছে যে আমি কখনই গ্রুপবাইয়ের সাথে কেন বিরক্ত হব? কেন এটি থাকা উচিত?


7
GroupByহয় IQuerable, ILookupতা নয়
ম্যাগনাস

5
গ্রুপবাই তালিকাটি গণনা করে না টুলুকআপ এটিকে একইভাবে গণ্য করেছে ToList /
ToArray

3
আমি এটা বলে অভিযোগ সম্পর্কে সদৃশ যেটির প্রশ্ন যেহেতু পুনরায় খোলার জন্য এই মনোনয়ন থাকেন IGrouping বদলে GroupBy এবং ILookup বদলে ToLookup । এইগুলির মধ্যে পার্থক্যগুলি এইগুলির মধ্যে পার্থক্যগুলির চেয়ে পৃথক। প্রশ্নের উত্তরগুলির মধ্যে পার্থক্য থেকে এটি স্পষ্ট হওয়া উচিত।
স্যাম

1
উভয়ই একটি তৈরি করে Lookup, তবে GroupByফলাফলটি যখন রেফারেন্সসোর্স.মাইক্রোসফট
# সিস্টেমে.করে

উত্তর:


175

আমি কেন কখনও গ্রুপবাইয়ের সাথে বিরক্ত হব? কেন এটি থাকা উচিত?

আপনি যখন কোনও বিলিয়ন সারি সহ একটি দূরবর্তী ডেটাবেস টেবিল উপস্থাপন করে এমন কোনও বস্তুতে টলুকআপ কল করবেন তখন কী হবে?

বিলিয়নের সারিগুলি তারের উপরে প্রেরণ করা হয় এবং আপনি স্থানীয়ভাবে অনুসন্ধানের টেবিলটি তৈরি করেন।

আপনি যখন এইরকম কোনও জিনিসে গ্রুপবাইকে কল করবেন তখন কী হবে?

একটি কোয়েরি অবজেক্ট নির্মিত হয়েছে; গল্পের শেষে.

যখন এই ক্যোয়ারী অবজেক্টটি গণিত করা হয় তখন সারণির বিশ্লেষণ ডাটাবেস সার্ভারে করা হয় এবং গোষ্ঠীভিত্তিক ফলাফলগুলি একবারে কয়েকবার দাবিতে ফেরত পাঠানো হয়

যৌক্তিকভাবে তারা একই জিনিস কিন্তু প্রতিটি এর পারফরম্যান্স জড়িত সম্পূর্ণ পৃথক। টলউকআপকে কল করার অর্থ আমি এখন গোষ্ঠী দ্বারা সংগঠিত পুরো জিনিসটির একটি ক্যাশে চাই । গ্রুপবাইকে কল করার অর্থ "আমি এই উপস্থাপনাটি দলবদ্ধভাবে সংগঠিত করেছিলাম তবে এগুলি দেখতে কেমন হবে?" এই প্রশ্নের উপস্থাপনের জন্য আমি একটি অবজেক্ট তৈরি করছি ""


6
পোস্টারটি নির্দিষ্ট করে কোনও IQueryable<T>প্রতিনিধিত্বকে লক্ষ্য করে না । আপনার উত্তরটি সেই পরিস্থিতিটি covers IEnumerable<T>েকে রাখে, তবে যখন এটি কেবল সরল ওল (লিনকিউ-টু-অবজেক্টস) হয় তখন মনে হয় এটির অন্যটির ব্যবহারের কোনও কারণ নেই, যা আমি বিশ্বাস করি যে @ শ্লোমো চেষ্টা করার চেষ্টা করছে। নাIQueryable<T> যদি, কিন্তু LINQ টু অবজেক্টস কেস।
ক্যাস্পারওন

21
@ ক্যাস্পার ওন: আমি মনে করি আপনি আমার বক্তব্যটি বুঝতে ব্যর্থ হয়েছেন। এমনকি লিনকিউ-টু-অবজেক্টস ক্ষেত্রে, গ্রুপবাইকে কল করা এখনও সংগ্রহের মাধ্যমে পুনরাবৃত্তি করে না। (যেমনটি অ্যাডুচি উত্তরটি মুছে ফেলেছিলেন যা আপনি মুছে ফেলেছেন)) এটি একটি মৌলিক পার্থক্য।
এরিক লিপার্ট

12
@ এরিকলিপার্ট: তবে এটি কি বাস্তবায়নের কেবলমাত্র একটি পার্শ্ব প্রতিক্রিয়া বা আপনি গ্যারান্টিযুক্ত যে যখন আপনি টলুকআপ কল করবেন তখন গণনার পুনরাবৃত্তি হবে, বাস্তবায়নে কী পরিবর্তন আনা হয়েছে তা বিবেচনা করেই?

9
@ উইল: আপনি একটি দুর্দান্ত পয়েন্ট করেছেন; ডকুমেন্টেশন গ্যারান্টি দেয় না যে ToLookup "আগ্রহী"। এটি সম্ভবত নোট করা উচিত।
এরিক লিপার্ট

10
আগ্রহ তা ব্যাখ্যা করে explains আমি মনে করি 'টোমেটাটাইপ' এর ভাষাটি উত্সাহকে বোঝায়; যদিও এটি বাস্তবায়নের বাকি রয়েছে। অন্যান্য 'টু'সরা সবাই আগ্রহী (টোলিস্ট, টোআররে, টোড शब्दकोश)। ধন্যবাদ বন্ধুরা.
Shlomo

98

সাধারণ লিনকিউ-ওয়ার্ল্ড শব্দের মধ্যে:

  • ToLookup() - অবিলম্বে কার্যকর
  • GroupBy() - স্থগিত কার্যকর করা

17

দুটি একই, তবে বিভিন্ন পরিস্থিতিতে ব্যবহৃত হয়। .ToLookup()ইতিমধ্যে সমস্ত গ্রুপ রয়েছে (তবে গোষ্ঠীর বিষয়বস্তু নয়) উত্সাহিতভাবে লোড করা বস্তুটি ব্যবহারের জন্য প্রস্তুত ফেরত দেয়। অন্যদিকে .GroupBy(), দলগুলির একটি অলস বোঝা ক্রম প্রদান করে।

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

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