在 LINQ 上使用 group by 語法
在 SQL 中 group by 是很常見的語法,而在 LINQ 中也有實作對應的語法,只是筆者一直以來較少用到 LINQ 上的這項功能,所以寫了篇文章簡單筆記一下。
首先定義一個類別來做測試:
public class Person
{
public string Name { get; set; } = string.Empty;
public int Age { get; set; }
public bool Gender { get; set; }
public DateOnly Birthday { get; set; }
public string City { get; set; } = string.Empty;
public static List<Person> GetPeople()
{
var list = new List<Person>
{
new Person { Name = "Peter", Age = 40, Gender = true, Birthday = new DateOnly(1983, 9, 22), City = "Taipei" },
new Person { Name = "John", Age = 36, Gender = true, Birthday = new DateOnly(1990, 4, 3), City = "Taipei" },
new Person { Name = "Yuki", Age = 18, Gender = false, Birthday = new DateOnly(1992, 5, 4), City = "New Taipei City" },
new Person { Name = "Ally", Age = 37, Gender = true, Birthday = new DateOnly(1985, 4, 7), City = "New Taipei City" },
new Person { Name = "Peter", Age = 44, Gender = true, Birthday = new DateOnly(1989, 9, 21), City = "New Taipei City" },
new Person { Name= "Mary", Age = 17, Gender = false, Birthday = new DateOnly(2001, 1, 4), City = "Taichung Tourism" },
};
return list;
}
}
從上面的程式中,可以看到經過 group by 語法整理出來的資料要塞進一個變數中。而假如 group by 的條件不只一個時該怎麼做?程式碼如下:
var result = from p in people
group p by new { p.Gender, p.Name } into gender
select gender;
foreach (var item in result)
{
var key = item.Key;
Console.WriteLine(key.Name);
Console.WriteLine(key.Gender);
Console.WriteLine();
}