相关文章推荐
听话的黄豆  ·  读取hdf文件- ...·  1 年前    · 
谦逊的佛珠  ·  深入分析Kafka ...·  2 年前    · 
不拘小节的鸵鸟  ·  spring - Gradle build ...·  2 年前    · 

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

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

2.最大值

var q =  
from p in db.Products  
group p by p.CategoryID into g  
select new {  
g.Key,  
MaxPrice = g.Max(p => p.UnitPrice)  

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

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

3.最小值

var q =  
from p in db.Products  
group p by p.CategoryID into g  
select new {  
g.Key,  
MinPrice = g.Min(p => p.UnitPrice)  

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

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

4.平均值

var q =  
from p in db.Products  
group p by p.CategoryID into g  
select new {  
g.Key,  
AveragePrice = g.Average(p => p.UnitPrice)  

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

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

var q =  
from p in db.Products  
group p by p.CategoryID into g  
select new {  
g.Key,  
TotalPrice = g.Sum(p => p.UnitPrice)  
var q =  
from p in db.Products  
group p by p.CategoryID into g  
select new {  
g.Key,  
NumProducts = g.Count()  

语句描述:Linq使用Group ByCount得到每个CategoryID中产品的数量。

说明:先按CategoryID归类,取出CategoryID值和各个分类产品的数量。

7.带条件计数

var q =  
from p in db.Products  
group p by p.CategoryID into g  
select new {  
g.Key,  
NumProducts = g.Count(p => p.Discontinued)  

语句描述:Linq使用Group ByCount得到每个CategoryID中断货产品的数量。

说明:先按CategoryID归类,取出CategoryID值和各个分类产品的断货数量。 Count函数里,使用了Lambda表达式,Lambda表达式中的p,代表这个组里的一个元素或对象,即某一个产品。

8.Where限制

var q =  
from p in db.Products  
group p by p.CategoryID into g  
where g.Count() >= 10  
select new {  
g.Key,  
ProductCount = g.Count()  

语句描述:根据产品的―ID分组,查询产品数量大于10的ID和产品数量。这个示例在Group By子句后使用Where子句查找所有至少有10种产品的类别。

说明:在翻译成SQL语句时,在最外层嵌套了Where条件。

9.多列(Multiple Columns)

var categories =  
from p in db.Products  
group p by new  
p.CategoryID,  
p.SupplierID  
into g  
select new  
g.Key,  

语句描述:Linq使用Group ByCategoryIDSupplierID将产品分组。

说明:既按产品的分类,又按供应商分类。在by后面,new出来一个匿名类。这里,Key其实质是一个类的对象,Key包含两个PropertyCategoryIDSupplierID。用g.Key.CategoryID可以遍历CategoryID的值。

10.表达式(Expression)

var categories =  
from p in db.Products  
group p by new { Criterion = p.UnitPrice > 10 } into g  
select g; 

语句描述:Linq使用Group By返回两个产品序列。第一个序列包含单价大于10的产品。第二个序列包含单价小于或等于10的产品。
说明:按产品单价是否大于10分类。其结果分为两类,大于的是一类,小于及等于为另一类。

原文链接:
https://blog.csdn.net/WuLex 今天在公司做一个需求的时候,写的是面条代码,一个方法直接从头写到尾,其中用到了GroupBy,且GroupBy的KeySelector是多个属性而不是单个属性。 但是公司最近推行Clean Code,要让代码有可读性。且作为一个有追求的程序员,肯定是不能写面条代码的,要对代码进行拆分。 重构前GroupBy大概是这样子的: var groups = data.GroupBy(m => new { m.PropertyA, m.PropertyB}) 个人对于短的Linq比较习惯于用方法而不是用关键字的那种写法。 一开始这样写是没问题的,但是重构的时候问题就来了:这个groups是什么 统计和B、C、D同组的数量 List<Order> Orders= samples.GroupBy(p => new { p.B, p.C, p.D}) //D,B,C是samples的属性 .Select(p => new Order var vmasQuery = from sum in det.Det_Summary join vmas in det.Det_VMAS on new {DetLsh = sum.DetLsh,DetTimes = sum.DetTimes} equals new {DetLsh = vmas.DetLsh,D... public string Name { set; get; } public int Age { set; get; } public string Gender { set; get; } public override string ToString() => Name; 2、准备要使用的List,用于分组(GroupBy): 今天写项目时遇到一个分组查询的需求:将订单列表中商品明细按商品编号汇总,我这里简单的mark一下。 之所以要记录,是因为之前很少用linq去写分组查询,其次是在此过程中遇到了一个小问题。 我们都知道linq语句最后也是要转化成sql语句的,很多人忽略开发效率一味地认为linq的执行效率没有sql的高,或者因为习惯问题不愿意使用linq。(今天在此就不探讨这个问题了,哲学思想告诉我“存在即合理”... Linq 中按照多个值进行分组(GroupBy) .GroupBy(x =&gt; new { x.Age, x.Sex }) group emp by new { emp.Age, emp.Sex } into g // 实现多key分组的扩展函数版本 var sums = empList .GroupBy(x =&gt; new { x.Age, x.S... linq将大部分SQL语句进行了封装,这使得它们更加面向对象了,对于开发者来说,这是一件好事,下面我从基础层面来说一下GroupBy在LINQ中的使用。 对GroupBy的多字段分组,可以看我的这篇文章 GroupBy,顾名思义,它是对集合中某个或者某几个字段进行分组,按着这个分组字段(这里叫key)进行排列,例如,我们按着用户表中部分进行分组,结果它会把人事部门的用户信息放在一起,技... public string Name { set; get; } public int Age { set; get; } public string Gender { set; get; } public override string ToString() => Name; 创建测试数据 List<Person> personList = new List