Trong bài blog này mình sẽ hướng dẫn các bạn, làm thế nào để group by sử dụng linq2entiy, với mục đích demo, mình sẽ tạo 1 lớp rất đơn giản như sau:
class City
{
public string Country { get; set; }
public string Name { get; set; }
}
VB.NET:
Class City
Public Property Name As String
Public Property Country As String
End Class
Sau đó tạo 1 danh sách các Cities khởi gián giá trị cho dánh sách đó như sau:
List<City> cities = new List<City>
{
new City{ Country="Vietnam",Name="Ha Noi"},
new City{ Country="USA",Name="New York"},
new City{ Country="USA",Name="Boston"},
new City{ Country="Tokyo",Name="Japan"},
new City{ Country="Milan",Name="Spain"},
new City{ Country="Amsterdam",Name="Netherland"},
new City{ Country="Vietnam",Name="Hai Phong"},
new City{ Country="Vietnam",Name="Ho Chi Minh"},
};
VB.NET
Dim cities As New List(Of City)() From _
{
New City With {.Country = "Vietnam", .Name = "Ha Noi"},
New City With {.Country = "USA", .Name = "New York"},
New City With {.Country = "USA", .Name = "Boston"},
New City With {.Country = "Tokyo", .Name = "Japan"},
New City With {.Country = "Milan", .Name = "Spain"},
New City With {.Country = "Amsterdam", .Name = "Netherland"},
New City With {.Country = "Vietnam", .Name = "Hai Phong"},
New City With {.Country = "Vietnam", .Name = "Ho Chi Minh"}
}
Giờ mình sẽ muốn nhóm danh sách trên theo Country mình làm như sau:
var query = cities.GroupBy(c => c.Country).Select(g => new
{
CountryName = g.Key,
CityNames = g.Select(n => n.Name).ToList()
});
VB.NET:
Dim query = cities.GroupBy(Function(c) c.Country).[Select](Function(g) New With { _
.CountryName = g.Key, _
.CityNames = g.[Select](Function(n) n.Name).ToList()})
Để group by trong Linq2Entiy mình sử dụng phương thức mở rộng GroupBy, tiếp theo mình sẽ get các giá trị bằng phương thức mở rộng Select vào anonymous type, g.Key là thuộc tính chúng ta group
foreach (var country in query)
{
Console.WriteLine("Follow cities in: {0}", country.CountryName);
foreach (var item in country.CityNames)
{
Console.WriteLine(item);
}
}
VB.NET:
For Each country In query
Console.WriteLine("Follow cities in: {0}", country.CountryName)
For Each item In country.CityNames
Console.WriteLine(item)
Next
Next
Dòng foreach bên trên sẽ hiển thị kết quả sau khi group bởi Country

GroupByInLinq2Entity.rar (70.65 kb)