Linq学习——Group By

1.简单形式:

   
   
  1. var q =
  2. from p in db.Products
  3. group p by p.CategoryID into g
  4. select g;

语句描述:Linq使用Group By按CategoryID划分产品。

说明:from p in db.Products 表示从表中将产品对象取出来。group p by p.CategoryID into g表示对p按CategoryID字段归类。其结果命名为g,一旦重新命名,p的作用域就结束了,所以,最后select时,只能select g。

2.最大值

   
   
  1. var q =
  2. from p in db.Products
  3. group p by p.CategoryID into g
  4. select new {
  5. g.Key,
  6. MaxPrice = g.Max(p => p.UnitPrice)
  7. };

语句描述:Linq使用Group By和Max查找每个CategoryID的最高单价。

说明:先按CategoryID归类,判断各个分类产品中单价最大的Products。取出CategoryID值,并把UnitPrice值赋给MaxPrice。

3.最小值

   
   
  1. var q =
  2. from p in db.Products
  3. group p by p.CategoryID into g
  4. select new {
  5. g.Key,
  6. MinPrice = g.Min(p => p.UnitPrice)
  7. };

语句描述:Linq使用Group By和Min查找每个CategoryID的最低单价。

说明:先按CategoryID归类,判断各个分类产品中单价最小的Products。取出CategoryID值,并把UnitPrice值赋给MinPrice。

4.平均值

   
   
  1. var q =
  2. from p in db.Products
  3. group p by p.CategoryID into g
  4. select new {
  5. g.Key,
  6. AveragePrice = g.Average(p => p.UnitPrice)
  7. };

语句描述:Linq使用Group By和Average得到每个CategoryID的平均单价。

说明:先按CategoryID归类,取出CategoryID值和各个分类产品中单价的平均值。

5.求和

  1. var q =
  2. from p in db.Products
  3. group p by p.CategoryID into g
  4. select new {
  5. g.Key,
  6. TotalPrice = g.Sum(p => p.UnitPrice)
  7. };
 
Where 过滤;延迟 
Select 选择;延迟 
Distinct 查询不重复的结果集;延迟 
Count 返回集合中的元素个数,返回INT类型;不延迟 
LongCount 返回集合中的元素个数,返回LONG类型;不延迟 
Sum 返回集合中数值类型元素之和,集合应为INT类型集合;不延迟 
Min 返回集合中元素的最小值;不延迟 
Max 返回集合中元素的最大值;不延迟 
Average 返回集合中的数值类型元素的平均值。集合应为数字类型集合,其返回值类型为double;不延迟 
Aggregate  根据输入的表达式获取聚合值;不延迟 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LINQ(Language Integrated Query)是C#编程语言中的一个功能,它可以方便地对各种数据源进行查询和操作。其中,GroupBy操作可以将数据源中的元素按照指定的键分组,并返回一个包含这些分组的集合。在分组时,可以使用不同的方式进行分组,其中的一种方式就是按照某个属性值进行分组。 对于分开的GroupBy,指的是在使用GroupBy操作时,可以将分组的结果再进行分组,以得到更详细的信息。例如,可以按照某个属性值进行初步的分组,然后再按照另一个属性值将每个组内的元素再次分组。 下面是一个使用分开的GroupBy操作的示例代码: ```csharp class Person { public string Name { get; set; } public int Age { get; set; } public string Gender { get; set; } public string City { get; set; } } List<Person> people = new List<Person>() { new Person { Name = "Alice", Age = 25, Gender = "Female", City = "New York" }, new Person { Name = "Bob", Age = 30, Gender = "Male", City = "Los Angeles" }, new Person { Name = "Charlie", Age = 35, Gender = "Male", City = "New York" }, new Person { Name = "David", Age = 40, Gender = "Male", City = "Los Angeles" }, new Person { Name = "Emily", Age = 45, Gender = "Female", City = "New York" } }; var groups = people .GroupBy(p => p.Gender) .Select(g => new { Gender = g.Key, Cities = g.GroupBy(p => p.City) .Select(c => new { City = c.Key, Count = c.Count() }) }); foreach (var group in groups) { Console.WriteLine(group.Gender); foreach (var city in group.Cities) { Console.WriteLine("- {0}: {1}", city.City, city.Count); } } ``` 在上面的代码中,首先按照Gender属性对people进行了初步的分组,然后在每个分组内部再按照City属性进行了分组。最终输出的结果如下: ``` Female - New York: 2 Male - Los Angeles: 2 - New York: 1 ``` 这个结果表示,在people中,共有两个性别(Female和Male),其中Female这个分组中有2个人居住在New York,而Male这个分组中有2个人居住在Los Angeles,1个人居住在New York。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值