C# 如何在LINQ查询中使用GROUPBY?

C# 如何在LINQ查询中使用GROUPBY?,c#,linq,asp.net-mvc-4,group-by,C#,Linq,Asp.net Mvc 4,Group By,在我现有的项目中有linq查询,类似这样: group new {a.name,a,description,a.number,i.productname} by new {i.productname} into grpProduct public class Student { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } } va

在我现有的项目中有linq查询,类似这样:

group new {a.name,a,description,a.number,i.productname}
by new {i.productname} into grpProduct
public class Student
{
    public int Id { get; set; }

    public string Name { get; set; }

    public int Age { get; set; }
}
var i = (from s in students
         group new { s.Id, s.Name }
         by new { s.Age });

我的查询中有一个GROUPBY,其语法与上面的查询类似。表示它正在使用
分组新建
,然后使用
分组新建
。但是我不明白这个语法的目的。有人能帮我吗?

语句
by
声明用于分组数据的键值,而
group
语句选择要“分组”的键值。因此,您的结果将是对
i.productname
进行
i分组
(这将是密钥),如果您获取这些分组项目中的每个项目,您将访问所有
新的{a.name,a,description,a.number,i.productname}
与此键对应的具有
i.productname
的对象。

假设您有这样一个类:

group new {a.name,a,description,a.number,i.productname}
by new {i.productname} into grpProduct
public class Student
{
    public int Id { get; set; }

    public string Name { get; set; }

    public int Age { get; set; }
}
var i = (from s in students
         group new { s.Id, s.Name }
         by new { s.Age });
您定义了一个列表并向其中添加了一些学生

var students = new List<Student>();
by new
部分指定创建分组所用的键。因此,当您执行查询时,每个
Age
将得到一个组,
Age
将是每个组的“键”

(由于只指定了一个字段,您可以将该部分重写为s.Age的


group new
部分指定您希望在每个“组”中提供的内容。鉴于
Age
将是关键,当您深入到每个组时,您将拥有一个匿名类型的集合,其中包括
Id
Name

,您能建议我一种在简单sql查询中转换此查询的方法吗?当然。希望SQL中的
group by
语句更简单一些:
从表a中选择a.name、a.description、a.number、i.productname,表i join。。。按i.productname分组
此处的
分组依据
选择
是不同的。