Asp.net mvc 如何在LINQtoSQL中执行多个GROUPBY?

Asp.net mvc 如何在LINQtoSQL中执行多个GROUPBY?,asp.net-mvc,linq-to-sql,Asp.net Mvc,Linq To Sql,如何在LINQtoSQL中执行多个GROUPBY 你能告诉我linq查询语法和linq方法语法吗 谢谢 编辑 我说的是多个参数,比如按性别和年龄分组 此外,我忘了在对年龄进行分组之前,我该如何说将所有年龄相加 如果我有这个例子,我会怎么做 表产品 产品ID 产品名称 产品数量 产品价格 现在想象一下,无论出于什么原因,我有很多行,每行都有相同的产品名称、不同的产品数量和产品价格 我如何按产品名称分组并将ProductQty和ProductPrice相加 我知道在这个例子中,可能没有意义,为什么会

如何在LINQtoSQL中执行多个GROUPBY

你能告诉我linq查询语法和linq方法语法吗

谢谢

编辑

我说的是多个参数,比如按性别和年龄分组

此外,我忘了在对年龄进行分组之前,我该如何说将所有年龄相加

如果我有这个例子,我会怎么做

表产品

产品ID 产品名称 产品数量 产品价格

现在想象一下,无论出于什么原因,我有很多行,每行都有相同的产品名称、不同的产品数量和产品价格

我如何按产品名称分组并将ProductQty和ProductPrice相加


我知道在这个例子中,可能没有意义,为什么会有一行又一行的相同产品名称,但在我的数据库中,这是有意义的,它不是产品。

要按多个属性分组,您需要创建一个新对象以按以下方式分组:

var groupedResult = from person in db.People
                    group by new { person.Sex, person.Age } into personGroup
                    select new 
                    { 
                        personGroup.Key.Sex, 
                        personGroup.Key.Age, 
                        NumberInGroup = personGroup.Count() 
                    }
抱歉,我没有看到您的最终编辑。我可能有点误解,但如果你把年龄加起来,你就不能按年龄分组。你可以按性别分组,求和或平均年龄……但你不能在一个语句中同时按性别分组和求和年龄。也许可以使用嵌套LINQ查询来获取任何给定性别的总年龄或平均年龄……不过要复杂一些

编辑:

要解决您的具体问题,它应该非常简单和直接。您仅按名称进行分组,因此其余部分是使用服务和具体dto类型更新的基本示例:

class ProductInventoryInfo
{
    public string Name { get; set; }
    public decimal Total { get; set; }
} 

class ProductService: IProductService
{

    public IList<ProductInventoryInfo> GetProductInventory()
    {
        // ...

        var groupedResult = from product in db.Products
                            group by product.ProductName into productGroup
                            select new ProductInventoryInfo
                            {
                                Name = productGroup.Key,
                                Total = productGroup.Sum(p => p.ProductCost * p.ProductQty)
                            }

        return groupedResult.ToList();
    }
}

要按多个属性分组,您需要创建一个新对象以按以下方式分组:

var groupedResult = from person in db.People
                    group by new { person.Sex, person.Age } into personGroup
                    select new 
                    { 
                        personGroup.Key.Sex, 
                        personGroup.Key.Age, 
                        NumberInGroup = personGroup.Count() 
                    }
抱歉,我没有看到您的最终编辑。我可能有点误解,但如果你把年龄加起来,你就不能按年龄分组。你可以按性别分组,求和或平均年龄……但你不能在一个语句中同时按性别分组和求和年龄。也许可以使用嵌套LINQ查询来获取任何给定性别的总年龄或平均年龄……不过要复杂一些

编辑:

要解决您的具体问题,它应该非常简单和直接。您仅按名称进行分组,因此其余部分是使用服务和具体dto类型更新的基本示例:

class ProductInventoryInfo
{
    public string Name { get; set; }
    public decimal Total { get; set; }
} 

class ProductService: IProductService
{

    public IList<ProductInventoryInfo> GetProductInventory()
    {
        // ...

        var groupedResult = from product in db.Products
                            group by product.ProductName into productGroup
                            select new ProductInventoryInfo
                            {
                                Name = productGroup.Key,
                                Total = productGroup.Sum(p => p.ProductCost * p.ProductQty)
                            }

        return groupedResult.ToList();
    }
}

你的意思是按多个参数分组?还是组内的多级分组组?您是指通过多个参数进行分组?或者组中的多级分组?我可以在两条语句中完成,只要最终结果是我有一个合计的字段。你是在寻找年龄之和,还是平均年龄,每个性别?我在寻找关于Ex和age示例的总和,但在我的真实数据库中,我添加了两个表格。我列出了一个我想做的排序示例。您的声明是将产品成本和数量相加吗?或者它们最终会是两个不同的字段?我可以用两个语句来完成,只要最终结果是我有一个合计的字段。你是在寻找年龄的总和,还是平均年龄,每个性别?我在寻找关于Ex和age示例的总和,但在我的真实数据库中,我添加了两个表格。我列出了一个我想做的排序示例。您的声明是将产品成本和数量相加吗?或者他们最终会是两个不同的领域?