如何在linq到sql中执行多个Group By?

cho*_*bo2 0 asp.net-mvc linq-to-sql

怎么能在linq到sql中做多个"group by's"?

你能用linq查询语法和linq方法语法向我展示.

谢谢

编辑.

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

另外我忘了提到在我分组之前我怎么说加起来所有的年龄.

如果我有这个例子我将如何做到这一点

表产品

ProductId ProductName ProductQty ProductPrice

现在想象一下,无论出于什么原因,我都有大量的行,每行都有相同的ProductName,不同的ProductQty和ProductPrice.

我如何通过产品名称填充下边缘并将ProductQty和ProductPrice加在一起?

我知道在这个例子中,为什么一行一行地使用相同的产品名称可能没有任何意义,但在我的数据库中它是有意义的(它不是产品).

jri*_*sta 5

要按多个属性进行分组,您需要创建一个新对象以进行分组:

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() 
                    }
Run Code Online (Sandbox Code Playgroud)

道歉,我没有看到你的最终编辑.我可能会误解,但如果你总结年龄,你就不能把它归为一类.您可以按性别分组,总计或平均年龄......但您不能在一个声明中同时按性别和总计年龄进行分组.有可能使用嵌套的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();
    }
}
Run Code Online (Sandbox Code Playgroud)