PDA

View Full Version : شرح پارامترها در IGrouping در Linq



F.zeinali
دوشنبه 09 آبان 1390, 10:27 صبح
سلام دوستان
زمانی که در دستور select از group استفاده می کنیم برای loop زدن با استفاده از foreach جنس متغیر را از نوع Igroupin<> در نظر می گیریم که این Interface دو پارامتر از ما می گیرد
حالا می خوام بدونم که
1_ پارامتر اول چیه و چه نقشی داره؟
2_ پارامتر دوم چیه و چه نقشی داره؟:متفکر:

مثل کد زیر

var query = customers.GroupBy(c => c.country, c => c.Name);
foreach (IGrouping<Countries,string> CustomerGroup in query)
{
foreach (var item in CustomerGroup)
{
MessageBox.Show(CustomerGroup.Key+"\n"+item);
}
}





Countries یه enum هستش که شامل نام کشور USA , Italy هستش
با تشکر از دوستان:لبخندساده:

F.zeinali
سه شنبه 10 آبان 1390, 21:43 عصر
لطفا یکی جواب بده؟

hf1988
چهارشنبه 11 آبان 1390, 11:58 صبح
لطفا یکی جواب بده؟

سلام. ببین رفیق extention method مربوط به group by دقیقا 8 تا overload دار که یکی از اونا به این صورته.

public static IEnumerable<IGrouping<TKey, TElement>> GroupBy<TSource, TKey, TElement>(
this IEnumerable<TSource> source, Func<TSource, TKey> keySelector,
Func<TSource, TElement> elementSelector);
در این پارامتر source توسط key selecttor و key element بررسی میشه بعد به در یه شی از
IEnumerable<IGrouping<TKey, TElement>> قرار میگیره یعنی از طریق اون key میتونی به فیلدایی که group by روشون اعمال شده دسترسی داشته باشی و اون Telement هم درواقع type عناصری هستش که داری روشون group by میزنی. در مثال خودت string هستش ولی فرض کن یه lsit از person ها داشتیم به این صورت



public class Person
{
public int ID { get; set; }
public string Name { get; set; }
}



List<Person> lstPerson = new List<Person>()
{
new Person{ID =1 , Name ="Ali"},
new Person{ID=2,Name ="hossein"},
new Person{ID=3,Name="hossein"}
};
dataGridView1.DataSource = lstPerson.GroupBy(k => k.Name).ToList() ;


توی این حالتlstPerson.GroupBy یه مجموعه از [CODE]IEnumerable<IGrouping<string, Person>>[/CODE
بر میگردونه.