-
var
q
=
-
from
p in db.Products
-
group p by p.CategoryID into g
-
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.最大值
-
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。
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 By和Min查找每个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 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值和各个分类产品的数量。
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 By和Count得到每个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,
-
g
-
};
语句描述:Linq使用Group By按CategoryID和SupplierID将产品分组。
说明:既按产品的分类,又按供应商分类。在by后面,new出来一个匿名类。这里,Key其实质是一个类的对象,Key包含两个Property:CategoryID、SupplierID。用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分类。其结果分为两类,大于的是一类,小于及等于为另一类。
1.简单形式:var q = from p in db.Products group p by p.CategoryID into g select g; 语句描述:Linq使用Group By按CategoryID划分产品。说明:from p in db.Products 表示从表中将产品对象取出来。group p by p.CategoryID into g表示对p按Cate
四、联接操作符
联接是指将一个数据源对象与另一个数据源对象进行关联或者联合的操作。这两个数据源对象通过一个共同的值或者属性进行关联。
LINQ
有两个联接操作符:Join和
Group
Join。
1. Join
Join操作符类似于T-SQL中的inner join,它将两个数据源相联接,根据两个数据源中相等的值进行匹配。例如,可以将产品表与产品类别表相联接,得到产品名称和与其相对应的类别名称。以下的代码演示了这一点:
//查询语法
var query =
(from p in db.Products
public string Name { set; get; }
public int Age { set; get; }
public string Gender { set; get; }
public override string ToString() => Name;
2、准备要使用的List,用于分组(
Group
By):
今天写项目时遇到一个分组查询的需求:将订单列表中商品明细按商品编号汇总,我这里简单的mark一下。
之所以要记录,是因为之前很少用
linq
去写分组查询,其次是在此过程中遇到了一个小问题。
我们都知道
linq
语句最后也是要转化成sql语句的,很多人忽略开发效率一味地认为
linq
的执行效率没有sql的高,或者因为习惯问题不愿意使用
linq
。(今天在此就不探讨这个问题了,哲学思想告诉我“存在即合理”...
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
var results = from p in persons
group
p.car by p.PersonId into g
select new { PersonId = g.Key, Cars = g.ToList() };
linq
在数据分组时,不会像数据库
group
by那样,表面上只返回
group
by后的一条数据,而是根据要...
public string Name { set; get; }
public int Age { set; get; }
public string Gender { set; get; }
public override string ToString() => Name;
2、准备要使用的List,用于分组(
Group
By):
List personList = new List
new Person
在整理资料的时候常常都需要给资料做分组,以便更进一步的分析及处理,最常见的分组处理应该就是在餐厅问券上常常会看到的年龄组别的部分,因各个年龄层的喜好并不相同,所以做分组对于分析资料来说非常的重要,在
LINQ
的应用上也是如此,接著让我们来看看
Group
By要怎麽使用吧。
使用
Group
By时指定元素的属性(栏位),它就会以这个属性做分组的处理。
请看下面的示意图(节录自Microsoft Docs):
我们有一个英文字集合的物件Source,想要把各个英文字的资料抓出来,这时就会用到分组的处理,处
LINQ
和Lambda都是C#编程语言的功能,但它们有不同的用途。
LINQ
是一个查询语言,允许您使用类似于SQL的语法查询各种数据源,例如数据库、集合、XML文档等。使用
LINQ
可以更容易地查询和处理数据,从而减少了编写大量循环和条件语句的代码。
Lambda是一种表达式,用于创建匿名方法或委托。Lambda表达式通常用于
LINQ
查询中作为筛选器、选择器或排序器。它允许您更轻松地编写匿名函数,并且可以提高代码的可读性和可维护性。
因此,虽然
LINQ
和Lambda经常一起使用,但它们有不同的功能和用途。
LINQ
用于查询和处理数据,而Lambda用于编写匿名方法和委托。