语句描述:Linq使用
Group By
按
CategoryID
划分产品。
说明:
from p in db.Products
表示从表中将产品对象取出来。
group p by p.CategoryID into g
表示对
p
按
CategoryID
字段归类。其结果命名为
g
,一旦重新命名,
p
的作用域就结束了,所以,最后
select
时,只能
select g
。
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 By和Max查找每个CategoryID的最高单价。
说明:先按CategoryID归类,判断各个分类产品中单价最大的Products。取出CategoryID值,并把UnitPrice值赋给MaxPrice。
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 By和Min查找每个CategoryID的最低单价。
说明:先按CategoryID归类,判断各个分类产品中单价最小的Products。取出CategoryID值,并把UnitPrice值赋给MinPrice。
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 By和Average得到每个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 By和Count得到每个CategoryID中产品的数量。
说明:先按CategoryID归类,取出CategoryID值和各个分类产品的数量。
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 By和Count得到每个CategoryID中断货产品的数量。
说明:先按CategoryID归类,取出CategoryID值和各个分类产品的断货数量。 Count函数里,使用了Lambda表达式,Lambda表达式中的p,代表这个组里的一个元素或对象,即某一个产品。
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条件。
var categories =
from p in db.Products
group p by new
p.CategoryID,
p.SupplierID
into g
select new
g.Key,
语句描述:Linq使用Group By按CategoryID和SupplierID将产品分组。
说明:既按产品的分类,又按供应商分类。在by后面,new出来一个匿名类。这里,Key其实质是一个类的对象,Key包含两个Property:CategoryID、SupplierID。用g.Key.CategoryID可以遍历CategoryID的值。
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 => new { x.Age, x.Sex })
group emp by new { emp.Age, emp.Sex } into g
// 实现多key分组的扩展函数版本
var sums = empList
.GroupBy(x => 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