Enumerable.GroupBy
और Queryable.GroupBy
एक्सटेंशन में 8 ओवरलोड हैं। उन्हें (Enumerable.GroupBy
के लिए) के दो प्रकार हैं:एलिमेंट से चयनकर्ता चयनकर्ता और परिणाम चयनकर्ता
// (a)
IEnumerable<TResult> GroupBy<TSource, TKey, TResult>(
this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector,
Func<TKey, IEnumerable<TSource>, TResult> resultSelector);
// (b)
IEnumerable<TResult> GroupBy<TSource, TKey, TElement, TResult>(
this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector,
Func<TSource, TElement> elementSelector,
Func<TKey, IEnumerable<TElement>, TResult> resultSelector);
(Queryable.GroupBy
के लिए एक ही है, बस Expression<Func<...
बजाय Func<...
साथ)
(b)
एक अतिरिक्त elementSelector
पैरामीटर के रूप में है।
एमएसडीएन पर an example for overload (a) और an example for overload (b) है। वे एक ही उदाहरण स्रोत संग्रह के साथ दोनों काम:
List<Pet> petsList = new List<Pet>
{
new Pet { Name="Barley", Age=8.3 },
new Pet { Name="Boots", Age=4.9 },
new Pet { Name="Whiskers", Age=1.5 },
new Pet { Name="Daisy", Age=4.3 }
};
उदाहरण (क) इस क्वेरी का उपयोग करता है:
var query = petsList.GroupBy(
pet => Math.Floor(pet.Age), // keySelector
(age, pets) => new // resultSelector
{
Key = age,
Count = pets.Count(),
Min = pets.Min(pet => pet.Age),
Max = pets.Max(pet => pet.Age)
});
और उदाहरण (ख) इस क्वेरी का उपयोग करता है:
var query = petsList.GroupBy(
pet => Math.Floor(pet.Age), // keySelector
pet => pet.Age, // elementSelector
(baseAge, ages) => new // resultSelector
{
Key = baseAge,
Count = ages.Count(),
Min = ages.Min(),
Max = ages.Max()
});
परिणाम दोनों प्रश्नों का बिल्कुल वही है।
प्रश्न 1: क्या कोई ऐसी क्वेरी है जिसे मैं resultSelector
अकेले उपयोग करके व्यक्त नहीं कर सकता हूं और जहां मुझे वास्तव में elementSelector
की आवश्यकता होगी? या दो ओवरलोड की क्षमताओं हमेशा समकक्ष हैं और यह सिर्फ एक या दूसरे तरीके से उपयोग करने के लिए स्वाद का मामला है?
प्रश्न 2: क्या LINQ क्वेरी सिंटैक्स का उपयोग करते समय दो अलग ओवरलोड के लिए कोई समकक्ष है?
(एक तरफ सवाल के रूप में: जब इकाई की रूपरेखा के साथ Queryable.GroupBy
उपयोग करते हुए, दोनों भार के ठीक उसी एसक्यूएल में अनुवाद किया जाएगा?)